rosmsg 0.5.0.0 → 0.5.1.0
raw patch · 6 files changed
+71/−55 lines, 6 filesdep +data-default-classdep +lens-family-coredep −data-defaultdep −lens-family
Dependencies added: data-default-class, lens-family-core
Dependencies removed: data-default, lens-family
Files
- rosmsg.cabal +4/−3
- src/Robotics/ROS/Msg.hs +2/−45
- src/Robotics/ROS/Msg/Class.hs +53/−0
- src/Robotics/ROS/Msg/ROSArray.hs +1/−1
- src/Robotics/ROS/Msg/Render.hs +1/−1
- src/Robotics/ROS/Msg/TH.hs +10/−5
rosmsg.cabal view
@@ -1,5 +1,5 @@ name: rosmsg-version: 0.5.0.0+version: 0.5.1.0 synopsis: ROS message parser, render, TH description: Please see README.md homepage: https://github.com/RoboticsHS/rosmsg#readme@@ -18,6 +18,7 @@ , Robotics.ROS.Msg.TH , Robotics.ROS.Msg.MD5 , Robotics.ROS.Msg.Types+ , Robotics.ROS.Msg.Class , Robotics.ROS.Msg.Parser , Robotics.ROS.Msg.Render build-depends: base >= 4.7 && < 5@@ -26,9 +27,9 @@ , pureMD5 >= 2.1 && < 3 , attoparsec >= 0.13 && < 1 , bytestring >= 0.10 && < 1- , lens-family >= 1.2 && < 2- , data-default >= 0.5 && < 1 , template-haskell >= 2.10 && < 2.12+ , lens-family-core >= 1.2 && < 2+ , data-default-class other-modules: Robotics.ROS.Msg.ROSArray default-language: Haskell2010
src/Robotics/ROS/Msg.hs view
@@ -23,16 +23,9 @@ -- message representation given by parser can be used in TemplateHaskell codegen -- for native Haskell structures creation. ----- >>> [rosmsgFrom|/opt/ros/jade/share/std_msgs/msg/Byte.msg|]--- "[Variable (Simple RByte,\"data\")]"------ >>> [rosmsgFrom|/opt/ros/jade/share/geometry_msgs/msg/Polygon.msg|]--- "[Variable (Array (Custom \"Point32\"),\"points\")]"--- module Robotics.ROS.Msg ( -- * ROS Message classes- Message(..)- , Stamped(..)+ module Robotics.ROS.Msg.Class -- * Common used types -- ** Array-like , ROSFixedArray(..)@@ -42,42 +35,6 @@ , ROSTime ) where -import Data.ByteString (ByteString)-import Data.Binary (Binary)-import Data.Word (Word32)-import Data.Text (Text)- import Robotics.ROS.Msg.ROSArray import Robotics.ROS.Msg.Types-import Robotics.ROS.Msg.MD5---- | 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+import Robotics.ROS.Msg.Class
+ src/Robotics/ROS/Msg/Class.hs view
@@ -0,0 +1,53 @@+-- |+-- 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
src/Robotics/ROS/Msg/ROSArray.hs view
@@ -20,9 +20,9 @@ ) where import GHC.TypeLits (Nat, KnownNat, natVal)+import Data.Default.Class (Default(..)) import Data.Binary (Binary(..), Get) import Control.Monad (replicateM)-import Data.Default (Default(..)) import Data.Typeable (Typeable) import Data.Word (Word32) import Data.Data (Data)
src/Robotics/ROS/Msg/Render.hs view
@@ -12,7 +12,7 @@ module Robotics.ROS.Msg.Render ( -- * Lazy Text builder render- -- * Stric Text render+ -- * Strict Text render , renderT ) where
src/Robotics/ROS/Msg/TH.hs view
@@ -10,6 +10,12 @@ -- Template Haskell driven code generator from ROS message language -- to Haskell native representation. --+-- >>> [rosmsgFrom|/opt/ros/jade/share/std_msgs/msg/Byte.msg|]+-- "[Variable (Simple RByte,\"data\")]"+--+-- >>> [rosmsgFrom|/opt/ros/jade/share/geometry_msgs/msg/Polygon.msg|]+-- "[Variable (Array (Custom \"Point32\"),\"points\")]"+-- {-# LANGUAGE CPP #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE QuasiQuotes #-}@@ -21,15 +27,14 @@ , rosmsgFrom ) where -import Data.Attoparsec.Text.Lazy (Result(..)) import Data.Char (isAlphaNum, toLower)+import Data.Default.Class (def) import Data.Maybe (catMaybes) import Data.Text.Lazy (pack) import Data.List (groupBy)-import Data.Default (def) import Data.Monoid ((<>))-import qualified Lens.Family2 as L import Data.Text (Text)+import qualified Lens.Family as L import qualified Data.Text as T import Language.Haskell.TH.Quote@@ -286,11 +291,11 @@ , mkStamped , mkLenses ]- where Done _ msg = Parser.parse Parser.rosmsg (pack txt)+ where Parser.Done _ msg = Parser.parse Parser.rosmsg (pack txt) mkDataName = mkName . drop 1 . last . groupBy (const isAlphaNum) msgRun n = ($ (n, msg)) . uncurry -- | Simple parse ROS message and show quoteMsgExp :: String -> ExpQ quoteMsgExp txt = stringE (show msg)- where Done _ msg = Parser.parse Parser.rosmsg (pack txt)+ where Parser.Done _ msg = Parser.parse Parser.rosmsg (pack txt)