packages feed

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