//// workflow.define: typed entry contract (entry fn + input/output/error codecs)
import aion/codec.{type Codec}
/// A typed workflow entry contract for the Aion engine.
///
/// Workflow authors write a plain function `fn(input) -> Result(output, error)`
/// and expose it to the engine by returning a `WorkflowDefinition` from the
/// package entry function named in the `.aion` manifest. AE consumes this value
/// at spawn: it calls that named package entry function, receives the definition,
/// decodes the input Payload with `input_codec`, invokes/drives the typed entry
/// function, and encodes the output or error Payload with `output_codec` or
/// `error_codec`.
///
/// AP (`aion-package`) records only the entry module and function names as
/// strings in the manifest; it does not introspect this Gleam value. The SDK
/// carries the contract but does not invoke `entry_fn` itself.
pub opaque type WorkflowDefinition(input, output, error) {
WorkflowDefinition(
name: String,
input_codec: Codec(input),
output_codec: Codec(output),
error_codec: Codec(error),
entry_fn: fn(input) -> Result(output, error),
)
}
/// Define a typed workflow entry contract consumed by AE at spawn.
pub fn define(
name: String,
input_codec: Codec(input),
output_codec: Codec(output),
error_codec: Codec(error),
entry_fn: fn(input) -> Result(output, error),
) -> WorkflowDefinition(input, output, error) {
WorkflowDefinition(
name: name,
input_codec: input_codec,
output_codec: output_codec,
error_codec: error_codec,
entry_fn: entry_fn,
)
}
/// Return the workflow name carried by the definition.
pub fn name(definition: WorkflowDefinition(input, output, error)) -> String {
definition.name
}
/// Return the input codec used by AE to decode the spawn Payload.
pub fn input_codec(
definition: WorkflowDefinition(input, output, error),
) -> Codec(input) {
definition.input_codec
}
/// Return the output codec used by AE to encode successful completion Payloads.
pub fn output_codec(
definition: WorkflowDefinition(input, output, error),
) -> Codec(output) {
definition.output_codec
}
/// Return the error codec used by AE to encode failed completion Payloads.
pub fn error_codec(
definition: WorkflowDefinition(input, output, error),
) -> Codec(error) {
definition.error_codec
}
/// Return the typed entry function carried for AE to invoke/drive.
pub fn entry_fn(
definition: WorkflowDefinition(input, output, error),
) -> fn(input) -> Result(output, error) {
definition.entry_fn
}