packages feed

wireform-derive-0.2.0.0: test/Test/Derive/Fixtures/Reified.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

{- | Splices that exercise the public deriver API against the
annotated types in "Test.Derive.Fixtures.Types".

Rather than try to embed entire 'ModifierInfo' values (which would
require @Lift@ instances we deliberately do not provide), we splice
only the values per-format derivers actually consume:

* the wire-key 'Text' returned by 'renderWireKey'
* 'Bool's that summarise key flags after resolution.
-}
module Test.Derive.Fixtures.Reified (
  -- * Wire keys
  personNameKeyJSON,
  personNameKeyCBOR,
  personAgeKeyJSON,
  personAgeKeyProto,
  personSSNKeyJSON,
  personSSNKeyCBOR,

  -- * Resolved flags
  personSSNSkipJSON,
  personSSNSkipCBOR,
  personAgeTagProto,
  personAgeTagJSON,
) where

import Data.Text (Text)
import Language.Haskell.TH.Syntax (lift)
import Test.Derive.Fixtures.Types qualified as F
import Wireform.Derive.Backend
import Wireform.Derive.ModifierInfo


-- ---------------------------------------------------------------------------
-- Wire keys
-- ---------------------------------------------------------------------------

personNameKeyJSON :: Text
personNameKeyJSON =
  $( do
       mi <- reifyModifierInfoFor backendJSON 'F.personName
       renderWireKey mi "personName"
   )


personNameKeyCBOR :: Text
personNameKeyCBOR =
  $( do
       mi <- reifyModifierInfoFor backendCBOR 'F.personName
       renderWireKey mi "personName"
   )


personAgeKeyJSON :: Text
personAgeKeyJSON =
  $( do
       mi <- reifyModifierInfoFor backendJSON 'F.personAge
       renderWireKey mi "personAge"
   )


personAgeKeyProto :: Text
personAgeKeyProto =
  $( do
       mi <- reifyModifierInfoFor backendProto 'F.personAge
       renderWireKey mi "personAge"
   )


personSSNKeyJSON :: Text
personSSNKeyJSON =
  $( do
       mi <- reifyModifierInfoFor backendJSON 'F.personSSN
       renderWireKey mi "personSSN"
   )


personSSNKeyCBOR :: Text
personSSNKeyCBOR =
  $( do
       mi <- reifyModifierInfoFor backendCBOR 'F.personSSN
       renderWireKey mi "personSSN"
   )


-- ---------------------------------------------------------------------------
-- Flags
-- ---------------------------------------------------------------------------

personSSNSkipJSON :: Bool
personSSNSkipJSON =
  $( do
       mi <- reifyModifierInfoFor backendJSON 'F.personSSN
       lift (miSkip mi)
   )


personSSNSkipCBOR :: Bool
personSSNSkipCBOR =
  $( do
       mi <- reifyModifierInfoFor backendCBOR 'F.personSSN
       lift (miSkip mi)
   )


personAgeTagProto :: Maybe Int
personAgeTagProto =
  $( do
       mi <- reifyModifierInfoFor backendProto 'F.personAge
       lift (miTag mi)
   )


personAgeTagJSON :: Maybe Int
personAgeTagJSON =
  $( do
       mi <- reifyModifierInfoFor backendJSON 'F.personAge
       lift (miTag mi)
   )