registry-messagepack-0.2.0.0: test/Test/Data/Registry/MessagePack/QualifiedEncodersSpec.hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}
module Test.Data.Registry.MessagePack.QualifiedEncodersSpec where
import Data.MessagePack
import Data.Registry
import Data.Registry.MessagePack.Encoder
import Data.Time
import Data.Vector
import Protolude
import Test.Data.Registry.MessagePack.DataTypes (qualifiedAsOptions, qualifiedOptions, qualifiedWithLastOptions, BoxedValues (..))
import qualified Test.Data.Registry.MessagePack.DataTypes
import qualified Test.Data.Registry.MessagePack.DataTypes as DataTypes
import Prelude (String)
{-
This specification checks that encoders built with qualified
name will compile
-}
encoders :: Registry _ _
encoders =
$(makeEncoderQualified ''Test.Data.Registry.MessagePack.DataTypes.Delivery)
<: $(makeEncoderQualified ''Test.Data.Registry.MessagePack.DataTypes.Person)
<: $(makeEncoderQualified ''Test.Data.Registry.MessagePack.DataTypes.Email)
-- options can also be used directly
<: $(makeEncoderWith qualifiedAsOptions ''Test.Data.Registry.MessagePack.DataTypes.Identifier)
<: $(makeEncoderWith qualifiedOptions ''Test.Data.Registry.MessagePack.DataTypes.Identifier)
<: $(makeEncoderWith qualifiedWithLastOptions ''Test.Data.Registry.MessagePack.DataTypes.Identifier)
<: $(makeEncoderWith qualifiedOptions ''BoxedValues)
<: fun datetimeEncoder
<: showEncoder @Integer
<: encodeListOf @Text
<: encodeMaybeOf @Int
<: messagePackEncoder @Text
<: messagePackEncoder @String
<: messagePackEncoder @Int
datetimeEncoder :: Encoder Test.Data.Registry.MessagePack.DataTypes.DateTime
datetimeEncoder = Encoder (ObjectStr . toS . formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%3QZ" . Test.Data.Registry.MessagePack.DataTypes._datetime)