packages feed

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"