packages feed

keiro-dsl-0.22.0.0: test/conformance-mapped-structural-enum-equality/Generated/MappedStructuralEnumEquality/StructuralProjections.hs

{-# LANGUAGE TypeFamilies #-}
-- @generated by keiro-dsl 0.22.0.0 (language keiro-dsl 6) from context mapped-structural-enum-equality mapped structural facade; do not edit.
-- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
-- Nominal ID and enum leaves carry exact canonical-text domains.
-- Int, Natural, and UTCTime belong to Keiki's ordered subset.
module Generated.MappedStructuralEnumEquality.StructuralProjections
  ( requiredScopeWitness
  , requiredScopeGet
  ) where

import Data.Text (Text)
import Data.List.NonEmpty (NonEmpty (..))
import Keiro.Codec.Structural (bindingToShape, bindingFromShape)
import Keiki.Core (FieldProjection (..), FieldWitness, ExactFieldProjection (..), exactFieldWitness)
import Keiki.ProjectionDomain (finiteProjectionDomain)
import Conformance.MappedStructuralEnumEquality.Bindings qualified as Bindings
import Conformance.MappedStructuralEnumEquality.Domain (RequiredScope)
import Generated.MappedStructuralEnumEquality.Structural.Shape.RequiredScope qualified as ShapeRequiredScope

data RequiredScopeProjection

requiredScopeGet :: RequiredScope -> Text
requiredScopeGet owner = case bindingToShape Bindings.requiredScopeBinding owner of ShapeRequiredScope.PipelineScope -> "pipeline"; ShapeRequiredScope.DiagnosticScope -> "diagnostic"

instance FieldProjection RequiredScopeProjection where
  type FieldName RequiredScopeProjection = ""
  type FieldOwner RequiredScopeProjection = RequiredScope
  type FieldResult RequiredScopeProjection = Text
  fieldShapeId _ = "conformance.RequiredScope.v1"
  projectFieldValue _ = requiredScopeGet

instance ExactFieldProjection RequiredScopeProjection where
  fieldProjectionDomain _ = finiteProjectionDomain ("pipeline" :| ["diagnostic"])
  reconstructFieldOwner _ value = case value of
    "pipeline" -> Just (bindingFromShape Bindings.requiredScopeBinding ShapeRequiredScope.PipelineScope)
    "diagnostic" -> Just (bindingFromShape Bindings.requiredScopeBinding ShapeRequiredScope.DiagnosticScope)
    _ -> Nothing

requiredScopeWitness :: FieldWitness RequiredScopeProjection
requiredScopeWitness = exactFieldWitness @RequiredScopeProjection