keiro-dsl-0.9.0.0: test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs
-- @generated by keiro-dsl 0.8.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
module Generated.NominalScalars.NominalLedger.EventStream
( nominalLedgerCategory
, nominalLedgerCommandCategory
, nominalLedgerEventStream
, nominalLedgerEventStreamDef
, NominalLedgerEventStream
, NominalLedgerEventStreamDef
, nominalLedgerSnapshotFixture
) where
import Generated.NominalScalars.NominalLedger.Domain
import Generated.NominalScalars.NominalLedger.Codec (nominalLedgerCodec)
import Generated.NominalScalars.NominalLedger.Transducer (nominalLedgerFoldFingerprint, nominalLedgerTransducer)
import Keiki.Core (HsPred)
import Keiro.EventStream (EventStream (..), SnapshotPolicy (..))
import Keiro.EventStream.Validate (ValidatedEventStream, mkEventStreamOrThrow)
import Data.Text (Text)
import Keiro.Snapshot.Codec (defaultStateCodec, withFoldFingerprint)
import Keiro.Stream qualified as Stream
-- The validated aggregate stream category (hole-kind 5: referenced, never retyped).
-- Entity streams are '<category>-<id>' via Keiro.Stream.entityStream.
-- categoryUnsafe is safe here because this generated literal passed the DSL category proof.
nominalLedgerCategory :: Stream.StreamCategory NominalLedgerEventStreamDef
nominalLedgerCategory = Stream.categoryUnsafe "nominalLedger"
-- The same category text, typed for command envelopes such as PMCommand.
nominalLedgerCommandCategory :: Stream.StreamCategory NominalLedgerCommand
nominalLedgerCommandCategory = Stream.categoryUnsafe "nominalLedger"
type NominalLedgerEventStreamDef =
EventStream (HsPred NominalLedgerRegs NominalLedgerCommand) NominalLedgerRegs NominalLedgerVertex NominalLedgerCommand NominalLedgerEvent
type NominalLedgerEventStream =
ValidatedEventStream (HsPred NominalLedgerRegs NominalLedgerCommand) NominalLedgerRegs NominalLedgerVertex NominalLedgerCommand NominalLedgerEvent
nominalLedgerEventStreamDef :: NominalLedgerEventStreamDef
nominalLedgerEventStreamDef =
EventStream
{ transducer = nominalLedgerTransducer,
initialState = NominalLedgerEmpty,
initialRegisters = initialNominalLedgerRegs,
eventCodec = nominalLedgerCodec,
resolveStreamName = Stream.streamName,
snapshotPolicy = Every 1,
-- The snapshot discriminator composes: the spec's state-codec version (bump it
-- in the spec's `state-codec version=` clause), keiki's register and
-- control-state shape hashes, and this fold fingerprint derived from the
-- spec's transition surface (guards, writes, emits, states, register
-- initials, referenced rules). Spec-visible fold changes invalidate old
-- snapshots automatically. Version-2 Hole-owned transitions additionally
-- compose their explicit hand-owned FoldVersion tokens here; bump the
-- corresponding token whenever that Hole behavior changes.
stateCodec = Just (withFoldFingerprint nominalLedgerFoldFingerprint (defaultStateCodec 1))
}
nominalLedgerSnapshotFixture :: (Int, Text)
nominalLedgerSnapshotFixture = (1, "nominal-scalars-v1")
nominalLedgerEventStream :: NominalLedgerEventStream
nominalLedgerEventStream =
mkEventStreamOrThrow "NominalLedger" nominalLedgerEventStreamDef