Here's my test case (which is a cleaned up version of one of the ADTs we serialize in our app, with UTCTime
s replaced by Text
).
instance CBOR.Serialise PPTS
instance CBOR.Serialise AMs
instance CBOR.Serialise AM
instance CBOR.Serialise SM
instance CBOR.Serialise CH
instance CBOR.Serialise RMs
instance CBOR.Serialise RM
instance CBOR.Serialise Im
instance CBOR.Serialise VDs
newtype SM = SM { _sm :: (HS.HashSet Text) }
deriving (NFData, Eq, Show, Generic)
newtype CH = CH { _ch :: Maybe Text }
deriving (NFData, Eq, Show, Generic)
newtype RMs = RMs { _rm :: [RM] }
deriving (NFData, Eq, Show, Generic)
data Im = Im (HM.HashMap Text Text) VDs
deriving (NFData, Eq, Show, Generic)
newtype VDs = VDs { _vlsL :: HM.HashMap Text (Text,Text) }
deriving (NFData, Eq, Show, Generic)
data RM = RM Text [Text] [Text] Text
deriving (NFData, Show, Eq, Generic)
data PPTS = PPTS SM CH Im RMs AMs (Maybe Text)
deriving (NFData, Eq, Show, Typeable, Generic)
data AM = AM Text Text [Text] Text Int
deriving (NFData, Show, Eq, Generic)
newtype AMs = AMs [AM]
deriving (NFData, Eq, Show, Generic)
-- make this UTCTime for a real test case:
fakeTime = "asdf-2345234-sasdf UTC"
ppts =
PPTS
(SM (HS.fromList ["asdf", "2345234 23452345", "asdfasdf", "2345"]))
(CH $ Just "he dfdfdfdf dfdfddf llp")
(Im (HM.fromList [("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f"),("sasd 5555555987","dff f")]) (VDs (HM.fromList [ ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")), ("sasd 55 344455555987",("dfffffffffff f","asdfasdfdddf")) ])))
(RMs [
RM (fakeTime) ["hello", "world"] ["hedddddddddddddddddddddddddddlp"] "somenaml"
, RM (fakeTime) ["asdfasdfhello", "world"] ["hedddddddddddddddddddddddddddlp"] "somenaml"
, RM (fakeTime) ["hello", "wasdfdforld"] ["hedddaddfdfdddddddddddddddddddddddddlp"] "somenaml"
, RM (fakeTime) ["he444444444444444asdkhjasdfllo", "world"] ["hedddddddddddddddaddfdfdddddddddddddlp"] "somenaml"
])
(AMs [
AM (fakeTime) "fffffffffffffffffffffffff" ["s","adfasdfasdfasdf"] "hellpasd akjha" 9874587484845
, AM (fakeTime) "fffffffffffffffffffffffff" ["s","adfasdfasdfasdf"] "hellpasd akjha" 9874345484845
, AM (fakeTime) "fffffff asdf ffffffffffffffffff" [] "hellpasd akjha" 3434345484845
])
Nothing
-- and instance for `cereal`:
instance C.Serialize PPTS
instance C.Serialize AMs
instance C.Serialize AM
instance C.Serialize SM
instance C.Serialize CH
instance C.Serialize RMs
instance C.Serialize RM
instance C.Serialize Im
instance C.Serialize VDs
instance (Eq a, Hashable a, C.Serialize a) => C.Serialize (HS.HashSet a) where
put = C.put . HS.toList
get = HS.fromList <$> C.get
instance (Eq a, Hashable a, C.Serialize a, C.Serialize b) => C.Serialize (HM.HashMap a b) where
put = C.put . HM.toList
get = HM.fromList <$> C.get
instance C.Serialize Text where
put = C.put . T.encodeUtf8
get = T.decodeUtf8 <$> C.get
Let me know if I'm missing something obvious, but otherwise I hope the above is a useful test case. Thanks for your work on this package!