packages feed

keiro-dsl-0.17.0.0: test/conformance-workspace-nominals/WorkspaceNominalProof/Domain.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module WorkspaceNominalProof.Domain where

import Data.Aeson (FromJSON, ToJSON)
import Data.KindID (KindID)
import Data.Proxy (Proxy)
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Shape (CanonicalTypeName (..))

newtype ClaimId = ClaimId {unClaimId :: KindID "claim"}
  deriving stock (Eq, Generic, Show)
  deriving newtype (FromJSON, ToJSON)

unClaimId :: ClaimId -> KindID "claim"
unClaimId (ClaimId value) = value

instance CanonicalTypeName ClaimId where
  canonicalTypeName :: Proxy ClaimId -> Text
  canonicalTypeName _ = "workspace-nominal-proof.ClaimId.v1"

data ProjectClaim = ProjectClaim
  { claimId :: !ClaimId
  }
  deriving stock (Eq, Generic, Show)
  deriving anyclass (FromJSON, ToJSON)

instance CanonicalTypeName ProjectClaim where
  canonicalTypeName :: Proxy ProjectClaim -> Text
  canonicalTypeName _ = "workspace-nominal-proof.ProjectClaim.v1"

data ArtifactClaim = ArtifactClaim
  { claimId :: !ClaimId
  }
  deriving stock (Eq, Generic, Show)
  deriving anyclass (FromJSON, ToJSON)

instance CanonicalTypeName ArtifactClaim where
  canonicalTypeName :: Proxy ArtifactClaim -> Text
  canonicalTypeName _ = "workspace-nominal-proof.ArtifactClaim.v1"