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