ablative docs
↑↓ move↵ openesc close
Stack Notebook ablative.com.au

Gleam workflow API

Read every public workflow function signature and its execution rules.

Open .md

Execution rules

Run dispatches one activity. All returns ordered results or fails on an activity error; race returns the first settled success or error and cancels the remaining activities. Settled forms preserve individual successes and failures. Map forms construct activity values for list items and retain the input order in their result list.

Recorded time and random functions preserve replay. Sleep and timers suspend workflow progress durably. With-timeout bounds a workflow operation; its result carries a typed timeout or operation error.

Child operations use output and error codecs. Hatch starts detached work with an explicit deduplication key. Continue-as-new starts a fresh run under the workflow identity; close-iteration carries state to a workloop’s next iteration.

The with-default forms supply a workflow-level task queue. An activity’s own queue overrides it; an unset activity and workflow queue use the default pool.

Public signatures

pub type Timestamp =
  dispatch.Timestamp

pub type WorkflowDefinition(input, output, workflow_error) =
  definition.WorkflowDefinition(input, output, workflow_error)

pub type TimerRef =
  timer.TimerRef

pub type SignalRef(payload) =
  signal.SignalRef(payload)

pub type ChildHandle(output, workflow_error) =
  child.ChildHandle(output, workflow_error)

pub fn run(
  activity: Activity(input, output),
) -> Result(output, error.ActivityError)

pub fn run_with_default(
  activity: Activity(input, output),
  workflow_default_task_queue: Option(String),
) -> Result(output, error.ActivityError)

pub fn all(
  activities: List(Activity(input, output)),
) -> Result(List(output), error.ActivityError)

pub fn all_with_default(
  activities: List(Activity(input, output)),
  workflow_default_task_queue: Option(String),
) -> Result(List(output), error.ActivityError)

pub fn race(
  activities: List(Activity(input, output)),
) -> Result(output, error.ActivityError)

pub fn race_with_default(
  activities: List(Activity(input, output)),
  workflow_default_task_queue: Option(String),
) -> Result(output, error.ActivityError)

pub fn all_settled(
  activities: List(Activity(input, output)),
) -> List(Result(output, error.ActivityError))

pub fn all_settled_with_default(
  activities: List(Activity(input, output)),
  workflow_default_task_queue: Option(String),
) -> List(Result(output, error.ActivityError))

pub fn map_settled(
  items: List(value),
  to_activity: fn(value) -> Activity(input, output),
) -> List(Result(output, error.ActivityError))

pub fn map_settled_with_default(
  items: List(value),
  to_activity: fn(value) -> Activity(input, output),
  workflow_default_task_queue: Option(String),
) -> List(Result(output, error.ActivityError))

pub fn map(
  items: List(value),
  to_activity: fn(value) -> Activity(input, output),
) -> Result(List(output), error.ActivityError)

pub fn map_with_default(
  items: List(value),
  to_activity: fn(value) -> Activity(input, output),
  workflow_default_task_queue: Option(String),
) -> Result(List(output), error.ActivityError)

pub fn id() -> Result(String, error.EngineError)

pub fn now() -> Result(Timestamp, error.EngineError)

pub fn random() -> Result(Float, error.EngineError)

pub fn random_int(min: Int, max: Int) -> Result(Int, error.EngineError)

pub fn sleep(duration: duration.Duration) -> Result(Nil, error.EngineError)

pub fn start_timer(
  name: String,
  duration: duration.Duration,
) -> Result(TimerRef, error.EngineError)

pub fn cancel_timer(reference: TimerRef) -> Result(Nil, error.EngineError)

pub fn with_timeout(
  operation: fn() -> Result(value, inner_error),
  deadline: duration.Duration,
) -> Result(value, error.TimeoutResultError(inner_error))

pub fn hatch(
  name: String,
  input: json.Json,
  key: String,
) -> Result(Nil, error.EngineError)

pub fn continue_as_new(
  input: a,
  input_codec: Codec(a),
) -> Result(Nil, error.WorkflowError)

pub fn close_iteration(
  carry: String,
  routes: List(String),
  invariant_states: json.Json,
) -> Result(Nil, error.WorkflowError)

pub fn receive(
  reference: SignalRef(payload),
) -> Result(payload, error.ReceiveError)

pub fn timer_id(reference: TimerRef) -> String

pub fn spawn(
  name: String,
  workflow_fn: fn(input) -> Result(output, workflow_error),
  input: input,
  input_codec: Codec(input),
  output_codec: Codec(output),
  error_codec: Codec(workflow_error),
) -> Result(ChildHandle(output, workflow_error), error.EngineError)

pub fn spawn_and_wait(
  name: String,
  workflow_fn: fn(input) -> Result(output, workflow_error),
  input: input,
  input_codec: Codec(input),
  output_codec: Codec(output),
  error_codec: Codec(workflow_error),
) -> Result(output, error.ChildError(workflow_error))

pub fn timestamp_to_milliseconds(timestamp: Timestamp) -> Int

pub fn define(
  name: String,
  input_codec: Codec(input),
  output_codec: Codec(output),
  error_codec: Codec(workflow_error),
  entry_fn: fn(input) -> Result(output, workflow_error),
) -> WorkflowDefinition(input, output, workflow_error)

pub fn name(
  definition: WorkflowDefinition(input, output, workflow_error),
) -> String

pub fn input_codec(
  definition: WorkflowDefinition(input, output, workflow_error),
) -> Codec(input)

pub fn output_codec(
  definition: WorkflowDefinition(input, output, workflow_error),
) -> Codec(output)

pub fn error_codec(
  definition: WorkflowDefinition(input, output, workflow_error),
) -> Codec(workflow_error)

pub fn entry_fn(
  definition: WorkflowDefinition(input, output, workflow_error),
) -> fn(input) -> Result(output, workflow_error)

pub fn entrypoint(
  definition: WorkflowDefinition(input, output, workflow_error),
  raw_input: Dynamic,
) -> Result(String, String)

On main, gleam/aion_flow/src/aion/workflow.gleam:1–314 declares this facade. Its submodules implement run, timers, concurrency, continuation, hatch, iteration and entry conversion.