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)