packages feed

keiro-dsl-0.7.0.0: test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.WorkspaceNominalProof.Nominals where

import Data.Aeson (FromJSON, ToJSON)
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Shape (CanonicalTypeName)
import Keiki.Core (ExactFieldProjection (..), FieldProjection (..), FieldWitness, exactFieldWitness, fieldWitness)
import Data.List.NonEmpty (NonEmpty (..))
import Keiki.ProjectionDomain (finiteProjectionDomain)

newtype ProjectId = ProjectId Text
  deriving stock (Generic, Eq, Ord, Show)
  deriving anyclass (ToJSON, FromJSON)

instance CanonicalTypeName ProjectId

projectIdText :: ProjectId -> Text
projectIdText (ProjectId value) = value

data ProjectIdEqualityProjection

instance FieldProjection ProjectIdEqualityProjection where
  type FieldName ProjectIdEqualityProjection = "ProjectId"
  type FieldOwner ProjectIdEqualityProjection = ProjectId
  type FieldResult ProjectIdEqualityProjection = Text
  fieldShapeId _ = "nominal-equality|name=ProjectId|contract=keiro-dsl/nominal-equality/1|key=Text|domain=legacy-unrestricted-text|owner=generated"
  projectFieldValue _ = projectIdText

projectIdEqualityWitness :: FieldWitness ProjectIdEqualityProjection
projectIdEqualityWitness = fieldWitness @ProjectIdEqualityProjection

data ProjectPhase = Draft | Active
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
  deriving anyclass (ToJSON, FromJSON)

instance CanonicalTypeName ProjectPhase

projectPhaseText :: ProjectPhase -> Text
projectPhaseText = \case
  Draft -> "draft"
  Active -> "active"

data ProjectPhaseEqualityProjection

instance FieldProjection ProjectPhaseEqualityProjection where
  type FieldName ProjectPhaseEqualityProjection = "ProjectPhase"
  type FieldOwner ProjectPhaseEqualityProjection = ProjectPhase
  type FieldResult ProjectPhaseEqualityProjection = Text
  fieldShapeId _ = "nominal-equality|name=ProjectPhase|contract=keiro-dsl/nominal-equality/1|key=Text|domain=finite-text:draft,active|owner=generated"
  projectFieldValue _ = projectPhaseText

instance ExactFieldProjection ProjectPhaseEqualityProjection where
  fieldProjectionDomain _ = finiteProjectionDomain ("draft" :| ["active"])
  reconstructFieldOwner _ = \case
    "draft" -> Just Draft
    "active" -> Just Active
    _ -> Nothing

projectPhaseEqualityWitness :: FieldWitness ProjectPhaseEqualityProjection
projectPhaseEqualityWitness = exactFieldWitness @ProjectPhaseEqualityProjection

data UnusedNominal = Present | Absent
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
  deriving anyclass (ToJSON, FromJSON)

instance CanonicalTypeName UnusedNominal

unusedNominalText :: UnusedNominal -> Text
unusedNominalText = \case
  Present -> "present"
  Absent -> "absent"