keiro-dsl-0.9.0.0: test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
-- @generated by keiro-dsl 0.8.0.0 (language keiro-dsl 4) from context nominal-scalars nominal scalar projection facade; do not edit.
module Generated.NominalScalars.NominalProjections where
import Data.KindID qualified as KindID
import Data.List.NonEmpty (NonEmpty (..))
import Data.Text (Text)
import Data.Time (UTCTime)
import Generated.NominalScalars.Nominal.Shape.OrderStatus qualified
import Keiki.Core (ExactFieldProjection (..), FieldProjection (..), FieldWitness, exactFieldWitness, fieldWitness)
import Keiki.ProjectionDomain (TextPattern, finiteProjectionDomain, matchesTextPattern, textCharSet, textConcat, textLiteral, textProjectionDomain, textRepeatBetween)
import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV7Domain, validateIdDomainText)
import Keiro.Codec.Nominal (nominalFromRepresentation, nominalToRepresentation)
import NominalConformance.Bindings qualified
import NominalConformance.Domain qualified
import Numeric.Natural (Natural)
data AccountNumberNominalProjection
instance FieldProjection AccountNumberNominalProjection where
type FieldName AccountNumberNominalProjection = "AccountNumber"
type FieldOwner AccountNumberNominalProjection = NominalConformance.Domain.AccountNumber
type FieldResult AccountNumberNominalProjection = Text
fieldShapeId _ = "nominal.AccountNumber.v1"
projectFieldValue _ = nominalToRepresentation NominalConformance.Bindings.accountNumberBinding
accountNumberWitness :: FieldWitness AccountNumberNominalProjection
accountNumberWitness = fieldWitness @AccountNumberNominalProjection
data FeatureFlagNominalProjection
instance FieldProjection FeatureFlagNominalProjection where
type FieldName FeatureFlagNominalProjection = "FeatureFlag"
type FieldOwner FeatureFlagNominalProjection = NominalConformance.Domain.FeatureFlag
type FieldResult FeatureFlagNominalProjection = Bool
fieldShapeId _ = "nominal.FeatureFlag.v1"
projectFieldValue _ = nominalToRepresentation NominalConformance.Bindings.featureFlagBinding
featureFlagWitness :: FieldWitness FeatureFlagNominalProjection
featureFlagWitness = fieldWitness @FeatureFlagNominalProjection
data ObservedAtNominalProjection
instance FieldProjection ObservedAtNominalProjection where
type FieldName ObservedAtNominalProjection = "ObservedAt"
type FieldOwner ObservedAtNominalProjection = NominalConformance.Domain.ObservedAt
type FieldResult ObservedAtNominalProjection = UTCTime
fieldShapeId _ = "nominal.ObservedAt.v1"
projectFieldValue _ = nominalToRepresentation NominalConformance.Bindings.observedAtBinding
observedAtWitness :: FieldWitness ObservedAtNominalProjection
observedAtWitness = fieldWitness @ObservedAtNominalProjection
orderIdEqualityPattern :: TextPattern
orderIdEqualityPattern = either (error . show) id (idDomainTextPattern (typeIdV7Domain "ord"))
data OrderIdEqualityProjection
instance FieldProjection OrderIdEqualityProjection where
type FieldName OrderIdEqualityProjection = "OrderId"
type FieldOwner OrderIdEqualityProjection = NominalConformance.Domain.OrderId
type FieldResult OrderIdEqualityProjection = Text
fieldShapeId _ = "nominal-equality|name=OrderId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:ord:keiro-dsl/id-domain/typeid-v7/1|owner=consumer;canonical=nominal.OrderId.v1;binding=NominalConformance.Bindings.orderIdBinding;binding-version=1"
projectFieldValue _ = KindID.toText . nominalToRepresentation NominalConformance.Bindings.orderIdBinding
instance ExactFieldProjection OrderIdEqualityProjection where
fieldProjectionDomain _ = textProjectionDomain orderIdEqualityPattern
reconstructFieldOwner _ value
| Left _ <- validateIdDomainText (typeIdV7Domain "ord") value = Nothing
| not (matchesTextPattern orderIdEqualityPattern value) = Nothing
| otherwise = case KindID.parseText @"ord" value of
Left _ -> Nothing
Right representation -> Just (nominalFromRepresentation NominalConformance.Bindings.orderIdBinding representation)
orderIdEqualityWitness :: FieldWitness OrderIdEqualityProjection
orderIdEqualityWitness = exactFieldWitness @OrderIdEqualityProjection
data OrderStatusEqualityProjection
instance FieldProjection OrderStatusEqualityProjection where
type FieldName OrderStatusEqualityProjection = "OrderStatus"
type FieldOwner OrderStatusEqualityProjection = NominalConformance.Domain.OrderStatus
type FieldResult OrderStatusEqualityProjection = Text
fieldShapeId _ = "nominal-equality|name=OrderStatus|contract=keiro-dsl/nominal-equality/1|key=Text|domain=finite-text:draft,submitted|owner=consumer;canonical=nominal.OrderStatus.v1;binding=NominalConformance.Bindings.orderStatusBinding;binding-version=1"
projectFieldValue _ = Generated.NominalScalars.Nominal.Shape.OrderStatus.orderStatusRepresentationText . nominalToRepresentation NominalConformance.Bindings.orderStatusBinding
instance ExactFieldProjection OrderStatusEqualityProjection where
fieldProjectionDomain _ = finiteProjectionDomain ("draft" :| ["submitted"])
reconstructFieldOwner _ = \case
"draft" -> Just (nominalFromRepresentation NominalConformance.Bindings.orderStatusBinding Generated.NominalScalars.Nominal.Shape.OrderStatus.Draft)
"submitted" -> Just (nominalFromRepresentation NominalConformance.Bindings.orderStatusBinding Generated.NominalScalars.Nominal.Shape.OrderStatus.Submitted)
_ -> Nothing
orderStatusEqualityWitness :: FieldWitness OrderStatusEqualityProjection
orderStatusEqualityWitness = exactFieldWitness @OrderStatusEqualityProjection
data RiskScoreNominalProjection
instance FieldProjection RiskScoreNominalProjection where
type FieldName RiskScoreNominalProjection = "RiskScore"
type FieldOwner RiskScoreNominalProjection = NominalConformance.Domain.RiskScore
type FieldResult RiskScoreNominalProjection = Int
fieldShapeId _ = "nominal.RiskScore.v1"
projectFieldValue _ = nominalToRepresentation NominalConformance.Bindings.riskScoreBinding
riskScoreWitness :: FieldWitness RiskScoreNominalProjection
riskScoreWitness = fieldWitness @RiskScoreNominalProjection
data SequenceNumberNominalProjection
instance FieldProjection SequenceNumberNominalProjection where
type FieldName SequenceNumberNominalProjection = "SequenceNumber"
type FieldOwner SequenceNumberNominalProjection = NominalConformance.Domain.SequenceNumber
type FieldResult SequenceNumberNominalProjection = Natural
fieldShapeId _ = "nominal.SequenceNumber.v1"
projectFieldValue _ = nominalToRepresentation NominalConformance.Bindings.sequenceNumberBinding
sequenceNumberWitness :: FieldWitness SequenceNumberNominalProjection
sequenceNumberWitness = fieldWitness @SequenceNumberNominalProjection