aion/internal/pump
The workflow-side query pump loop around suspending awaits.
The engine answers workflow queries at yield points (AT-007 C20): when a
query is pending for the workflow, a suspending await returns the
sentinel Error("aion_query:" <> json) instead of resolving. run
recognises the sentinel, services the query through
aion_flow_query_pump (handler lookup, try/catch, reply), and re-enters
the same await, which re-resolves identically — pump iterations are
invisible to history and to replay. Every other result passes through
untouched.
Values
pub fn run(
do: fn() -> Result(String, String),
) -> Result(String, String)
Run a suspending await thunk, servicing any pending queries the engine
surfaces as aion_query: sentinels before the await’s own resolution.
The loop is tail-recursive: each serviced query is answered exactly once,
then the await is re-entered until it resolves with a non-sentinel
result. A query handler raise never crashes the workflow — the Erlang
pump converts it into a reply_query_error and the loop continues.