packages feed

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

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.WorkspaceNominalProof.Project.Domain where

import Data.Proxy (Proxy (..))
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Core (RegFile (..))
import Generated.WorkspaceNominalProof.Nominals (ProjectId (..), ProjectPhase (..))
import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)

data ProjectVertex = ProjectEmpty | ProjectLive | ProjectArchived
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)

data RegisterProjectData = RegisterProjectData
  { projectId :: !ProjectId
  , phase :: !ProjectPhase
  }
  deriving stock (Generic, Eq, Show)

data ArchiveProjectData = ArchiveProjectData
  { projectId :: !ProjectId
  , phase :: !ProjectPhase
  }
  deriving stock (Generic, Eq, Show)

data ProjectCommand = RegisterProject !RegisterProjectData
  | ArchiveProject !ArchiveProjectData
  deriving stock (Generic, Eq, Show)

data ProjectRegisteredData = ProjectRegisteredData
  { projectId :: !ProjectId
  , phase :: !ProjectPhase
  }
  deriving stock (Generic, Eq, Show)

data ArchivalRecordedData = ArchivalRecordedData
  { projectId :: !ProjectId
  , phase :: !ProjectPhase
  }
  deriving stock (Generic, Eq, Show)

data ProjectEvent = ProjectRegistered !ProjectRegisteredData
  | ArchivalRecorded !ArchivalRecordedData
  deriving stock (Generic, Eq, Show)

type ProjectRegs =
  '[ '("projectId", ProjectId)
   , '("phase", ProjectPhase)
   ]

initialProjectRegs :: RegFile ProjectRegs
initialProjectRegs =
  RCons (Proxy @"projectId") (ProjectId "") $
  RCons (Proxy @"phase") Draft RNil

$(deriveAggregateCtorsAll ''ProjectCommand ''ProjectRegs)



$(deriveWireCtorsAll ''ProjectEvent)