keiro-dsl-0.15.0.0: test/fixtures/aggregate-scalar-expressions-v2.keiro
language keiro-dsl 4
context aggregate-scalar-expressions
id RequestId prefix=req
enum AccountMode { Normal=normal Restricted=restricted }
mapped structural record Limits {
haskell package=keiro-dsl module=ScalarExpressions.Domain type=Limits
binding = "ScalarExpressions.Bindings.limitsBinding"
binding-version = "1"
canonical-type = "scalar-expressions.Limits.v1"
fixtures = "ScalarExpressions.Bindings.limitsCases"
initial = "ScalarExpressions.Bindings.initialLimits"
wire object constructor=Limits unknown-fields=reject {
minimum as "minimum" : Integer required
ceiling as "ceiling" : Natural required
}
}
aggregate ScalarAccount
regs
balance Integer = 0
reserved Natural = 0
capacity Natural = 5
machine Int = 0
label Text = ""
active Bool = False
mode AccountMode = Normal
requestId RequestId = placeholder
openedAt Time = "2026-01-01T00:00:00Z"
limits Limits = initial
states Open Reviewed Closed!
command Adjust {
balance:Integer requested:Natural machine:Int label:Text active:Bool
mode:AccountMode requestId:RequestId observedAt:Time limits:Limits
}
command Close { balance:Integer }
event Adjusted = fields(Adjust)
event ClosedEvent = fields(Close)
Open -- Adjust -->
guard cmd.balance + reg.balance >= -100
&& reg.reserved + cmd.requested <= reg.capacity
&& cmd.observedAt >= reg.openedAt
&& cmd.limits.minimum >= reg.limits.minimum
&& cmd.active == false
&& cmd.mode == reg.mode
&& cmd.requestId == reg.requestId
write balance := reg.balance + cmd.balance * 2
write reserved := reg.reserved + (cmd.requested - reg.capacity)
write machine := -7
write label := "adjusted"
write active := true
write mode := AccountMode.Restricted
write requestId := RequestId("req_01h455vb4pex5vsknk084sn02q")
write openedAt := "2026-02-03T04:05:06Z"
write limits := cmd.limits
emit Adjusted
goto Reviewed
Reviewed -- Close -->
implementation hole
emit ClosedEvent
goto Closed
wire kind=ctorName fields=camelCase schemaVersion=1
snapshot every 1
state-codec version=1 shape-hash="aggregate-scalar-expressions-v2"