framework/step

CPS interpreter. State is a pure phantom; every operation rewraps.

Types

pub type Committed
pub type Open
pub type Outcome(out, err) {
  Done(out)
  Fail(err)
  Accepted
}

Constructors

  • Done(out)
  • Fail(err)
  • Accepted
pub type Start
pub opaque type Step(out, err, state)

Values

pub fn apply(
  operation: verb.Verb(value),
  then: fn(value) -> Step(out, err, Open),
) -> Step(out, err, state)
pub fn call(
  request: connector.Read(value),
  then: fn(value) -> Step(out, err, state),
) -> Step(out, err, state)
pub fn call_write(
  request: connector.Write(value),
  then: fn(value) -> Step(out, err, Committed),
) -> Step(out, err, Committed)
pub fn commit(
  carry: value,
  then: fn(value) -> Step(out, err, Committed),
) -> Step(out, err, state)
pub fn done(value: out) -> Step(out, err, state)
pub fn fail(error: err) -> Step(out, err, state)
pub fn guard(
  condition: Bool,
  error: err,
  then: fn() -> Step(out, err, state),
) -> Step(out, err, state)
pub fn interpret(
  step: Step(out, err, Start),
  context: io.Context,
) -> io.Promise(Outcome(out, err))
pub fn read(
  read: fn(io.Context) -> io.Promise(value),
  then: fn(value) -> Step(out, err, state),
) -> Step(out, err, state)
pub fn reject(
  operation: verb.Verb(value),
  error: err,
) -> Step(out, err, state)

Discard staged normal work; confirm only this verb in its own transaction. A failed save rejects the promise and is mapped to infrastructure failure.

pub fn resume(
  step: Step(out, err, Committed),
  context: io.Context,
) -> io.Promise(Outcome(out, err))

Queue adapters may only enter a continuation at a committed boundary.

Search Document