1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- module Gidl.Schema where
- import Data.Word
- import Data.Hashable
- import Gidl.Types
- import Gidl.Interface
- type MsgId = Word32
- data Message = Message String Type
- deriving (Eq, Show)
- data Schema = Schema String [(MsgId, Message)]
- deriving (Eq, Show)
- producerSchema :: Interface -> Schema
- producerSchema ir = Schema "Producer" [(mkMsgId m, m) | m <- messages ]
- where
- messages = concatMap producerMessages (interfaceMethods ir)
- producerMessages :: (MethodName,Method) -> [Message]
- producerMessages (streamname, (StreamMethod _ tr)) =
- [ Message streamname tr ]
- producerMessages (_ , (AttrMethod Write _)) = []
- producerMessages (attrname, (AttrMethod _ tr)) =
- [ Message (attrname ++ "_val") tr ]
- consumerSchema :: Interface -> Schema
- consumerSchema ir = Schema "Consumer" [(mkMsgId m, m) | m <- messages ]
- where
- messages = concatMap consumerMessages (interfaceMethods ir)
- consumerMessages :: (MethodName,Method) -> [Message]
- consumerMessages (_, (StreamMethod _ _)) = [] -- XXX eventaully add set rate?
- consumerMessages (attrname, (AttrMethod Write tr)) =
- [ Message (attrname ++ "_set") tr ]
- consumerMessages (attrname, (AttrMethod Read _)) =
- [ Message (attrname ++ "_get") (PrimType VoidType) ]
- consumerMessages (attrname, (AttrMethod ReadWrite tr)) =
- [ Message (attrname ++ "_set") tr
- , Message (attrname ++ "_get") (PrimType VoidType)
- ]
- mkMsgId :: Message -> MsgId
- mkMsgId = fromIntegral . hash . show
|