pub struct WorkflowExecutor { /* private fields */ }Expand description
Executes workflows.
Implementations§
Source§impl WorkflowExecutor
impl WorkflowExecutor
Sourcepub fn new(
registry: Arc<WorkflowRegistry>,
pool: PgPool,
http_client: CircuitBreakerClient,
) -> Self
pub fn new( registry: Arc<WorkflowRegistry>, pool: PgPool, http_client: CircuitBreakerClient, ) -> Self
Create a new workflow executor.
Sourcepub async fn start<I: Serialize>(
&self,
workflow_name: &str,
input: I,
owner_subject: Option<String>,
) -> Result<Uuid>
pub async fn start<I: Serialize>( &self, workflow_name: &str, input: I, owner_subject: Option<String>, ) -> Result<Uuid>
Start a new workflow on the active version. Returns immediately with the run_id; workflow executes in the background.
Sourcepub async fn resume(&self, run_id: Uuid) -> Result<WorkflowResult>
pub async fn resume(&self, run_id: Uuid) -> Result<WorkflowResult>
Resume a workflow from where it left off.
Sourcepub async fn resume_from_sleep(&self, run_id: Uuid) -> Result<WorkflowResult>
pub async fn resume_from_sleep(&self, run_id: Uuid) -> Result<WorkflowResult>
Resume a workflow after a sleep timer expired.
Sourcepub async fn status(&self, run_id: Uuid) -> Result<WorkflowRecord>
pub async fn status(&self, run_id: Uuid) -> Result<WorkflowRecord>
Get workflow status.
Sourcepub async fn cancel(&self, run_id: Uuid) -> Result<()>
pub async fn cancel(&self, run_id: Uuid) -> Result<()>
Cancel a workflow and run compensation.
Compensation follows the saga pattern: steps are undone in reverse order of their completion. This ensures that dependencies are respected. For example, if step A created a resource that step B modified, we must undo B’s modification before deleting A’s resource.
Compensation handlers receive the original step result, allowing them to know exactly what to undo (e.g., refund the specific payment ID).
Sourcepub async fn cancel_by_operator(&self, run_id: Uuid, reason: &str) -> Result<()>
pub async fn cancel_by_operator(&self, run_id: Uuid, reason: &str) -> Result<()>
Cancel a workflow run by operator decision. Terminal action that preserves audit trail.
Sourcepub async fn retire_unresumable(&self, run_id: Uuid, reason: &str) -> Result<()>
pub async fn retire_unresumable(&self, run_id: Uuid, reason: &str) -> Result<()>
Retire a workflow run as unresumable. Terminal action for blocked runs.
Sourcepub async fn save_step(&self, step: &WorkflowStepRecord) -> Result<()>
pub async fn save_step(&self, step: &WorkflowStepRecord) -> Result<()>
Save step record.
Trait Implementations§
Source§impl WorkflowDispatch for WorkflowExecutor
impl WorkflowDispatch for WorkflowExecutor
Auto Trait Implementations§
impl Freeze for WorkflowExecutor
impl !RefUnwindSafe for WorkflowExecutor
impl Send for WorkflowExecutor
impl Sync for WorkflowExecutor
impl Unpin for WorkflowExecutor
impl UnsafeUnpin for WorkflowExecutor
impl !UnwindSafe for WorkflowExecutor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more