packages feed

keiro-dsl-0.21.0.0: test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Domain.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE TemplateHaskell #-}
-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
module Generated.MappedRegisterConstruction.Lifecycle.Domain where

import Data.Aeson (FromJSON, ToJSON)
import Data.Proxy (Proxy (..))
import GHC.Generics (Generic)
import Keiki.Core (RegFile (..))
import Keiki.Shape (CanonicalStateShape, CanonicalTypeName)
import Data.Time.Clock (UTCTime)
import Conformance.MappedRegisterConstruction.Bindings qualified as Bindings
import Conformance.MappedRegisterConstruction.Domain (MaybeTime)
import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)

data LifecycleVertex = LifecycleEmpty | LifecycleAwake | LifecycleDormant | LifecycleClosed
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
  deriving anyclass (ToJSON, FromJSON)
instance CanonicalStateShape LifecycleVertex
instance CanonicalTypeName LifecycleVertex

data CreateData = CreateData
  { automatic :: !Bool
  }
  deriving stock (Generic, Eq, Show)

data MarkData = MarkData
  { markedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data PingData = PingData
  { markedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data AwakenData = AwakenData
  { awakenedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data CloseData = CloseData
  { closedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data ReopenData = ReopenData
  { reopenedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data LifecycleCommand = Create !CreateData
  | Mark !MarkData
  | Ping !PingData
  | Awaken !AwakenData
  | Close !CloseData
  | Reopen !ReopenData
  deriving stock (Generic, Eq, Show)

data CreatedData = CreatedData
  { automatic :: !Bool
  }
  deriving stock (Generic, Eq, Show)

data MarkedData = MarkedData
  { markedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data PingedData = PingedData
  { markedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data AwakenedData = AwakenedData
  { awakenedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data ClosedEventData = ClosedEventData
  { closedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data ReopenedData = ReopenedData
  { reopenedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)

data LifecycleEvent = Created !CreatedData
  | Marked !MarkedData
  | Pinged !PingedData
  | Awakened !AwakenedData
  | ClosedEvent !ClosedEventData
  | Reopened !ReopenedData
  deriving stock (Generic, Eq, Show)

type LifecycleRegs =
  '[ '("dormantSince", MaybeTime)
   , '("automatic", Bool)
   ]

initialLifecycleRegs :: RegFile LifecycleRegs
initialLifecycleRegs =
  RCons (Proxy @"dormantSince") Bindings.noTime $
  RCons (Proxy @"automatic") False RNil

$(deriveAggregateCtorsAll ''LifecycleCommand ''LifecycleRegs)



$(deriveWireCtorsAll ''LifecycleEvent)