Schema.hs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 Type
  8. deriving (Eq, Show)
  9. data Schema = Schema String [(MsgId, Message)]
  10. deriving (Eq, Show)
  11. producerSchema :: Interface -> Schema
  12. producerSchema ir = Schema "Producer" [(mkMsgId m, m) | m <- messages ]
  13. where
  14. messages = concatMap producerMessages (interfaceMethods ir)
  15. producerMessages :: (MethodName,Method) -> [Message]
  16. producerMessages (streamname, (StreamMethod _ tr)) =
  17. [ Message streamname tr ]
  18. producerMessages (_ , (AttrMethod Write _)) = []
  19. producerMessages (attrname, (AttrMethod _ tr)) =
  20. [ Message (attrname ++ "_val") tr ]
  21. consumerSchema :: Interface -> Schema
  22. consumerSchema ir = Schema "Consumer" [(mkMsgId m, m) | m <- messages ]
  23. where
  24. messages = concatMap consumerMessages (interfaceMethods ir)
  25. consumerMessages :: (MethodName,Method) -> [Message]
  26. consumerMessages (_, (StreamMethod _ _)) = [] -- XXX eventaully add set rate?
  27. consumerMessages (attrname, (AttrMethod Write tr)) =
  28. [ Message (attrname ++ "_set") tr ]
  29. consumerMessages (attrname, (AttrMethod Read _)) =
  30. [ Message (attrname ++ "_get") (PrimType VoidType) ]
  31. consumerMessages (attrname, (AttrMethod ReadWrite tr)) =
  32. [ Message (attrname ++ "_set") tr
  33. , Message (attrname ++ "_get") (PrimType VoidType)
  34. ]
  35. mkMsgId :: Message -> MsgId
  36. mkMsgId = fromIntegral . hash . show