Skip to main content

FlowEngine

Struct FlowEngine 

Source
pub struct FlowEngine { /* private fields */ }
Expand description

Event-sourced workflow engine.

Implementations§

Source§

impl FlowEngine

Source

pub fn builder(runtime: Arc<dyn FlowRuntime>) -> FlowEngineBuilder

Source

pub fn new( store: Arc<dyn FlowEventStore>, runtime: Arc<dyn FlowRuntime>, ) -> Self

Source

pub fn in_memory(runtime: Arc<dyn FlowRuntime>) -> Self

Source

pub fn store(&self) -> Arc<dyn FlowEventStore>

Source

pub fn observer(&self) -> Arc<dyn FlowEventObserver>

Source

pub async fn start(&self, spec: WorkflowSpec, input: Value) -> Result<String>

Start a workflow run and drive it until completion or suspension.

Source

pub async fn start_with_id( &self, run_id: impl Into<String>, spec: WorkflowSpec, input: Value, ) -> Result<String>

Start a workflow run using a caller-provided durable run id.

Reusing the same run_id with the same workflow spec and input is idempotent. Reusing it with different spec or input returns a conflict.

Source

pub async fn resume_wait(&self, run_id: &str, wait_id: &str) -> Result<()>

Resume a wait once its timer has fired.

Source

pub async fn resume_hook( &self, run_id: &str, hook_id: &str, payload: Value, ) -> Result<()>

Resume an active hook with external payload.

Source

pub async fn dispose_hook(&self, run_id: &str, hook_id: &str) -> Result<()>

Dispose an active hook without accepting a callback payload.

This is useful when a host withdraws an approval request, expires a webhook token, or closes an external callback route. The workflow is driven after the disposal event so replay code can observe WorkflowContext::hook_disposed and complete, fail, or schedule an alternate path.

Source

pub async fn resume_hook_by_token( &self, token: &str, payload: Value, ) -> Result<(String, String)>

Resume an active hook by its external token.

This is the API webhook handlers normally want: the callback receives a token, while run_id and hook_id remain engine internals.

Source

pub async fn dispose_hook_by_token( &self, token: &str, ) -> Result<(String, String)>

Dispose an active hook by its external token.

This mirrors resume_hook_by_token for callback routers that only know the public token.

Source

pub async fn list_due_waits( &self, now: DateTime<Utc>, ) -> Result<Vec<(String, String)>>

List active waits whose resume_at is at or before now.

Scheduler integrations can use this to inspect due timers before deciding how aggressively to drive them.

Source

pub async fn resume_due_waits( &self, now: DateTime<Utc>, ) -> Result<Vec<(String, String)>>

Complete every due wait and drive the affected workflows.

Returns the (run_id, wait_id) pairs that were resumed. A wait already completed by another caller is skipped by Self::resume_wait.

Source

pub async fn list_due_retries( &self, now: DateTime<Utc>, ) -> Result<Vec<(String, String)>>

List pending step retries whose retry_after is at or before now.

Source

pub async fn resume_due_retries( &self, now: DateTime<Utc>, ) -> Result<Vec<(String, String)>>

Drive every run with a due step retry.

Source

pub async fn cancel(&self, run_id: &str, reason: Option<String>) -> Result<()>

Source

pub async fn snapshot(&self, run_id: &str) -> Result<WorkflowRunSnapshot>

Source

pub async fn history(&self, run_id: &str) -> Result<Vec<FlowEventEnvelope>>

Source

pub async fn list_run_ids(&self) -> Result<Vec<String>>

Source

pub async fn list_snapshots(&self) -> Result<Vec<WorkflowRunSnapshot>>

Source

pub async fn run_summary(&self) -> Result<WorkflowRunSummary>

Summarize run state across the active store.

Suspension counters include only non-terminal runs, so a cancelled run that still has an old wait or hook in history is not reported as actionable work.

Source

pub async fn list_open_suspensions( &self, now: DateTime<Utc>, ) -> Result<Vec<WorkflowRunSuspension>>

List open waits, active hooks, and pending delayed retries.

The due flag on wait and retry suspensions is computed against now. Terminal runs are skipped so cancelled histories do not produce actionable operator work.

Source

pub async fn next_wakeup( &self, now: DateTime<Utc>, ) -> Result<Option<WorkflowRunSuspension>>

Return the earliest open wait or delayed retry across non-terminal runs.

This is useful for hosts that want to sleep until the next scheduler tick instead of polling at a fixed interval. Active hooks are intentionally ignored because they do not have a scheduled wake-up time.

Source

pub async fn list_active_hooks(&self) -> Result<Vec<ActiveHookSnapshot>>

List active external callback hooks across non-terminal runs.

Callback routers and dashboards can use this to discover public hook tokens and their audit metadata without projecting every run manually. The result is sorted by run ID and hook ID for stable polling output.

Source

pub async fn drive(&self, run_id: &str) -> Result<WorkflowRunSnapshot>

Replay and dispatch until the run reaches a terminal state or an open wait/hook suspension.

Trait Implementations§

Source§

impl Clone for FlowEngine

Source§

fn clone(&self) -> FlowEngine

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more