rosmsg-0.5.1.0: src/Robotics/ROS/Msg/Class.hs
-- |
-- Module : Robotics.ROS.Msg.Class
-- Copyright : Alexander Krupenkin 2016
-- License : BSD3
--
-- Maintainer : mail@akru.me
-- Stability : experimental
-- Portability : POSIX / WIN32
--
-- ROS message type class declaration.
--
module Robotics.ROS.Msg.Class (
Message(..)
, Stamped(..)
) where
import Robotics.ROS.Msg.Types (ROSTime)
import Data.Digest.Pure.MD5 (MD5Digest)
import Data.ByteString (ByteString)
import Data.Binary (Binary)
import Data.Word (Word32)
import Data.Text (Text)
-- | Haskell native type for ROS message language described
-- data structure. Serialization guaranted by 'Binary' super
-- class. And no more is needed for transfer over socket.
class Binary a => Message a where
-- | Get message type string, e.g. @std_msgs/Char@
getType :: a -> Text
-- | Get message source
getSource :: a -> Text
-- | Get recurrent MD5 of message source
getDigest :: a -> MD5Digest
-- | Sometime ROS messages have a special @Header@ field.
-- It used for tracking package sequence, time stamping
-- and frame tagging. Headers is frequently field. The
-- 'Stamped' type class lifts header fields on the top
-- of message and abstracting of type.
class Message a => Stamped a where
-- | Get sequence number
getSequence :: a -> Word32
-- | Set sequence number
setSequence :: Word32 -> a -> a
-- | Get timestamp of message
getStamp :: a -> ROSTime
-- | Get frame of message
getFrame :: a -> ByteString