Skip to main content

src/aion/workflow/continuation.gleam

//// continue_as_new workflow primitive.

import aion/codec.{type Codec}
import aion/error
import aion/internal/ffi

/// Continue the current workflow as a new run with fresh history.
///
/// The input is serialized through the workflow's input codec — the same
/// codec the entry wrapper decodes with — so the replacement run receives
/// exactly the payload shape it expects. On success the engine records
/// `WorkflowContinuedAsNew` and terminates the current run, so an `Ok` value
/// is intentionally uninhabited.
pub fn continue_as_new(
  input: a,
  input_codec: Codec(a),
) -> Result(Nil, error.WorkflowError) {
  case ffi.continue_as_new(input_codec.encode(input)) {
    Ok(value) -> Ok(value)
    Error(raw_error) -> Error(error.WorkflowEngineFailure(message: raw_error))
  }
}