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"