Schema.hs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. module Gidl.Schema where
  2. import Data.Word
  3. import Data.Hashable
  4. import Gidl.Types
  5. import Gidl.Interface
  6. type MsgId = Word32
  7. data Message = Message String TypeRepr
  8. deriving (Eq, Show)
  9. data Schema = Schema String [(MsgId, Message)]
  10. deriving (Eq, Show)
  11. producerSchema :: InterfaceRepr -> Schema
  12. producerSchema ir = Schema "Producer" [(mkMsgId m, m) | m <- messages ]
  13. where
  14. messages = concatMap mkMessages (interfaceMethods ir)
  15. mkMessages (streamname, (StreamMethod _ tr)) =
  16. [ Message streamname tr ]
  17. mkMessages (_ , (AttrMethod Write _)) = []
  18. mkMessages (attrname, (AttrMethod _ tr)) =
  19. [ Message (attrname ++ "_val") tr ]
  20. consumerSchema :: InterfaceRepr -> Schema
  21. consumerSchema ir = Schema "Consumer" [(mkMsgId m, m) | m <- messages ]
  22. where
  23. messages = concatMap mkMessages (interfaceMethods ir)
  24. mkMessages (_, (StreamMethod _ _)) = [] -- XXX eventaully add set rate?
  25. mkMessages (attrname, (AttrMethod Write tr)) =
  26. [ Message (attrname ++ "_set") tr ]
  27. mkMessages (attrname, (AttrMethod Read _)) =
  28. [ Message (attrname ++ "_get") voidTypeRepr ]
  29. mkMessages (attrname, (AttrMethod ReadWrite tr)) =
  30. [ Message (attrname ++ "_set") tr
  31. , Message (attrname ++ "_get") voidTypeRepr
  32. ]
  33. mkMsgId :: Message -> MsgId
  34. mkMsgId = fromIntegral . hash . show