packages feed

streamly-0.10.0: test/Streamly/Test/Data/Serialize/CompatV0.hs

{-# LANGUAGE TemplateHaskell #-}

module Streamly.Test.Data.Serialize.CompatV0
    ( Rec(..)
    , River(..)
    ) where

--------------------------------------------------------------------------------
-- Imports
--------------------------------------------------------------------------------

import Test.QuickCheck (Arbitrary, arbitrary, elements)
import Streamly.Internal.Data.MutByteArray (Serialize)
import qualified Streamly.Internal.Data.MutByteArray as Serialize

--------------------------------------------------------------------------------
-- Types
--------------------------------------------------------------------------------

data Rec a =
    Rec
        { initialField :: Int
        , otherField :: a
        , theLastField :: Maybe String
        }
    deriving (Eq, Show)

instance Arbitrary a => Arbitrary (Rec a) where
    arbitrary = Rec <$> arbitrary <*> arbitrary <*> arbitrary

$(Serialize.deriveSerializeWith
      (Serialize.encodeRecordFields True)
      [d|instance Serialize a => Serialize (Rec a)|])

data River
    = Ganga
    | Yamuna
    | Godavari
    deriving (Eq, Show, Read)

instance Arbitrary River where
    arbitrary = elements [Ganga, Yamuna, Godavari]

$(Serialize.deriveSerializeWith
      (Serialize.encodeConstrNames True)
      [d|instance Serialize River|])