keiro-dsl-0.9.0.0: test/conformance-coldstart/Generated/Billing/Nominals.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
-- @generated by keiro-dsl 0.8.0.0 (language keiro-dsl 4) from context billing generated nominal declarations; do not edit.
module Generated.Billing.Nominals
( CustomerId
, parseCustomerId
, mkCustomerId
, customerIdText
, Plan (..)
, planText
, PlanEqualityProjection
, planEqualityWitness
, SubscriptionId
, parseSubscriptionId
, mkSubscriptionId
, subscriptionIdText
) where
import Data.Aeson (FromJSON, ToJSON)
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Shape (CanonicalTypeName)
import Generated.Billing.Nominals.Internal (CustomerId, mkCustomerId, parseCustomerId, customerIdText, SubscriptionId, mkSubscriptionId, parseSubscriptionId, subscriptionIdText)
import Keiki.Core (ExactFieldProjection (..), FieldProjection (..), FieldWitness, exactFieldWitness, fieldWitness)
import Data.List.NonEmpty (NonEmpty (..))
import Keiki.ProjectionDomain (TextPattern, finiteProjectionDomain, textProjectionDomain)
import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV7Domain)
instance CanonicalTypeName CustomerId
data Plan = Paid | Free
deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
deriving anyclass (ToJSON, FromJSON)
instance CanonicalTypeName Plan
planText :: Plan -> Text
planText = \case
Paid -> "paid"
Free -> "free"
data PlanEqualityProjection
instance FieldProjection PlanEqualityProjection where
type FieldName PlanEqualityProjection = "Plan"
type FieldOwner PlanEqualityProjection = Plan
type FieldResult PlanEqualityProjection = Text
fieldShapeId _ = "nominal-equality|name=Plan|contract=keiro-dsl/nominal-equality/1|key=Text|domain=finite-text:paid,free|owner=generated"
projectFieldValue _ = planText
instance ExactFieldProjection PlanEqualityProjection where
fieldProjectionDomain _ = finiteProjectionDomain ("paid" :| ["free"])
reconstructFieldOwner _ = \case
"paid" -> Just Paid
"free" -> Just Free
_ -> Nothing
planEqualityWitness :: FieldWitness PlanEqualityProjection
planEqualityWitness = exactFieldWitness @PlanEqualityProjection
instance CanonicalTypeName SubscriptionId