packages feed

keiro-dsl-0.17.0.0: test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs

-- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context structural-nominal-leaves structural nominal leaves; do not edit.
module Generated.StructuralNominalLeaves.Structural.NominalLeaves where

import Data.Aeson (Value (..), parseJSON, toJSON, withText)
import Data.Aeson.Types (Parser)
import Data.KindID qualified as KindID
import Data.Text (Text)
import Data.Text qualified as T
import Keiro.Codec.IdDomain (parseKindIdV7Text)
import Keiro.Codec.Nominal (nominalFromRepresentation, nominalToRepresentation)
import Conformance.StructuralNominals.Bindings qualified as Bindings
import Conformance.StructuralNominals.Domain (AccountNumber, Channel, ClaimId)
import Generated.StructuralNominalLeaves.Nominal.Shape.Channel qualified as ShapeChannel
import Generated.StructuralNominalLeaves.Nominals qualified as Nominals

encodeAccountNumberLeaf :: AccountNumber -> Value
encodeAccountNumberLeaf = toJSON . nominalToRepresentation Bindings.accountNumberBinding
{-# NOINLINE encodeAccountNumberLeaf #-}

parseAccountNumberLeaf :: Value -> Parser AccountNumber
parseAccountNumberLeaf value = nominalFromRepresentation Bindings.accountNumberBinding <$> parseJSON value
{-# NOINLINE parseAccountNumberLeaf #-}

encodeChannelLeaf :: Channel -> Value
encodeChannelLeaf = String . ShapeChannel.channelRepresentationText . nominalToRepresentation Bindings.channelBinding
{-# NOINLINE encodeChannelLeaf #-}

parseChannelLeaf :: Value -> Parser Channel
parseChannelLeaf = withText "Channel" $ \input -> case input of
  "email" -> pure (nominalFromRepresentation Bindings.channelBinding ShapeChannel.Email)
  "sms" -> pure (nominalFromRepresentation Bindings.channelBinding ShapeChannel.Sms)
  unknown -> fail ("unknown Channel wire value " <> show unknown <> "; expected one of: email, sms")
{-# NOINLINE parseChannelLeaf #-}

encodeClaimIdLeaf :: ClaimId -> Value
encodeClaimIdLeaf = String . KindID.toText . nominalToRepresentation Bindings.claimIdBinding
{-# NOINLINE encodeClaimIdLeaf #-}

parseClaimIdLeaf :: Value -> Parser ClaimId
parseClaimIdLeaf = withText "ClaimId" $ \input ->
  case parseKindIdV7Text @"claim" input of
    Left reason -> fail (show reason)
    Right representation -> pure (nominalFromRepresentation Bindings.claimIdBinding representation)
{-# NOINLINE parseClaimIdLeaf #-}

renderClaimIdLeafKey :: ClaimId -> Text
renderClaimIdLeafKey = KindID.toText . nominalToRepresentation Bindings.claimIdBinding
{-# NOINLINE renderClaimIdLeafKey #-}

parseClaimIdLeafKey :: Text -> Parser ClaimId
parseClaimIdLeafKey input = case parseKindIdV7Text @"claim" input of
  Left reason -> fail (show reason)
  Right representation -> pure (nominalFromRepresentation Bindings.claimIdBinding representation)
{-# NOINLINE parseClaimIdLeafKey #-}

encodeTemplateIdLeaf :: Nominals.TemplateId -> Value
encodeTemplateIdLeaf = String . Nominals.templateIdText
{-# NOINLINE encodeTemplateIdLeaf #-}

parseTemplateIdLeaf :: Value -> Parser Nominals.TemplateId
parseTemplateIdLeaf = withText "TemplateId" (either (fail . T.unpack) pure . Nominals.parseTemplateId)
{-# NOINLINE parseTemplateIdLeaf #-}

renderTemplateIdLeafKey :: Nominals.TemplateId -> Text
renderTemplateIdLeafKey = Nominals.templateIdText
{-# NOINLINE renderTemplateIdLeafKey #-}

parseTemplateIdLeafKey :: Text -> Parser Nominals.TemplateId
parseTemplateIdLeafKey = either (fail . T.unpack) pure . Nominals.parseTemplateId
{-# NOINLINE parseTemplateIdLeafKey #-}

encodeTemplateKindLeaf :: Nominals.TemplateKind -> Value
encodeTemplateKindLeaf = String . Nominals.templateKindText
{-# NOINLINE encodeTemplateKindLeaf #-}

parseTemplateKindLeaf :: Value -> Parser Nominals.TemplateKind
parseTemplateKindLeaf = withText "TemplateKind" $ \input -> case input of
  "draft" -> pure Nominals.Draft
  "published" -> pure Nominals.Published
  unknown -> fail ("unknown TemplateKind wire value " <> show unknown <> "; expected one of: draft, published")
{-# NOINLINE parseTemplateKindLeaf #-}