packages feed

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

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE TypeFamilies #-}
-- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context structural-nominal-leaves generated nominal declarations; do not edit.
module Generated.StructuralNominalLeaves.Nominals
  ( TemplateId
  , parseTemplateId
  , mkTemplateId
  , templateIdText
  , TemplateIdEqualityProjection
  , templateIdEqualityWitness
  , TemplateKind (..)
  , templateKindText
  ) where

import Data.Aeson (FromJSON, ToJSON)
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Shape (CanonicalTypeName)
import Generated.StructuralNominalLeaves.Nominals.Internal (TemplateId, mkTemplateId, parseTemplateId, templateIdText)
import Keiki.Core (FieldProjection (..), FieldWitness, ExactFieldProjection (..), exactFieldWitness)
import Keiki.ProjectionDomain (TextPattern, textProjectionDomain)
import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV7Domain)


data TemplateIdEqualityProjection

instance FieldProjection TemplateIdEqualityProjection where
  type FieldName TemplateIdEqualityProjection = "TemplateId"
  type FieldOwner TemplateIdEqualityProjection = TemplateId
  type FieldResult TemplateIdEqualityProjection = Text
  fieldShapeId _ = "nominal-equality|name=TemplateId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:template:keiro-dsl/id-domain/typeid-v7/1|owner=generated"
  projectFieldValue _ = templateIdText

templateIdIdDomainPattern :: TextPattern
templateIdIdDomainPattern = either (error . show) id (idDomainTextPattern (typeIdV7Domain "template"))

instance ExactFieldProjection TemplateIdEqualityProjection where
  fieldProjectionDomain _ = textProjectionDomain templateIdIdDomainPattern
  reconstructFieldOwner _ = either (const Nothing) Just . parseTemplateId

templateIdEqualityWitness :: FieldWitness TemplateIdEqualityProjection
templateIdEqualityWitness = exactFieldWitness @TemplateIdEqualityProjection

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

instance CanonicalTypeName TemplateKind

templateKindText :: TemplateKind -> Text
templateKindText = \case
  Draft -> "draft"
  Published -> "published"