pub struct WorkflowRunEnqueueBuilder<'a> { /* private fields */ }Expand description
Builder for WorkflowRunEnqueue.
Use this builder to assemble a workflow enqueue payload incrementally.
Defaults:
organization_id:Noneidempotency_key:Nonesteps: empty
§Examples
use runledger_core::jobs::{
JobType, StepKey, WorkflowType,
WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder,
};
let payload = serde_json::json!({"profile_id": "p_123"});
let metadata = serde_json::json!({"source": "api"});
let step = WorkflowStepEnqueueBuilder::new(
StepKey::new("crawl"),
JobType::new("seller.profile.research.c2.website_crawler"),
&payload,
)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("seller.profile.research.initial"), &metadata)
.idempotency_key("profile:p_123:initial")
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.workflow_type(), WorkflowType::new("seller.profile.research.initial"));
assert_eq!(run.steps().len(), 1);Implementations§
Source§impl<'a> WorkflowRunEnqueueBuilder<'a>
impl<'a> WorkflowRunEnqueueBuilder<'a>
Sourcepub fn new(workflow_type: WorkflowType<'a>, metadata: &'a Value) -> Self
pub fn new(workflow_type: WorkflowType<'a>, metadata: &'a Value) -> Self
Creates a new run builder with the required fields.
workflow_type identifies the workflow definition to enqueue.
metadata is persisted with the run for tracing and auditing.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({"source": "api"});
let step = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("seller.profile.research.initial"), &metadata)
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.workflow_type(), WorkflowType::new("seller.profile.research.initial"));Sourcepub fn try_new(
workflow_type: &'a str,
metadata: &'a Value,
) -> Result<Self, WorkflowBuildError>
pub fn try_new( workflow_type: &'a str, metadata: &'a Value, ) -> Result<Self, WorkflowBuildError>
Creates a new run builder from a raw workflow identifier string with checked validation.
§Errors
Returns WorkflowBuildError when workflow_type is blank.
Sourcepub fn organization_id(self, organization_id: Uuid) -> Self
pub fn organization_id(self, organization_id: Uuid) -> Self
Sets the workflow organization scope.
§Examples
use uuid::Uuid;
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let step = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.organization_id(Uuid::nil())
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.organization_id(), Some(Uuid::nil()));Sourcepub fn clear_organization_id(self) -> Self
pub fn clear_organization_id(self) -> Self
Clears any previously configured workflow organization scope.
Sourcepub fn idempotency_key(self, idempotency_key: &'a str) -> Self
pub fn idempotency_key(self, idempotency_key: &'a str) -> Self
Sets a deduplication key for idempotent enqueue behavior.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let step = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.idempotency_key("org:123:workflow.test")
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.idempotency_key(), Some("org:123:workflow.test"));Sourcepub fn clear_idempotency_key(self) -> Self
pub fn clear_idempotency_key(self) -> Self
Clears any previously configured idempotency key.
Sourcepub fn step(self, step: WorkflowStepEnqueue<'a>) -> Self
pub fn step(self, step: WorkflowStepEnqueue<'a>) -> Self
Appends a single step to the workflow.
Step order is preserved and used as provided.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let step = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.steps().len(), 1);Sourcepub fn set_steps(
self,
steps: impl IntoIterator<Item = WorkflowStepEnqueue<'a>>,
) -> Self
pub fn set_steps( self, steps: impl IntoIterator<Item = WorkflowStepEnqueue<'a>>, ) -> Self
Replaces all previously configured steps with steps.
This is a replacement setter, not an append operation.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let a = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let b = WorkflowStepEnqueueBuilder::new(StepKey::new("step.b"), JobType::new("jobs.test.b"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.step(a)
.set_steps(vec![b])
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.steps().len(), 1);
assert_eq!(run.steps()[0].step_key(), StepKey::new("step.b"));Sourcepub fn extend_steps(
self,
steps: impl IntoIterator<Item = WorkflowStepEnqueue<'a>>,
) -> Self
pub fn extend_steps( self, steps: impl IntoIterator<Item = WorkflowStepEnqueue<'a>>, ) -> Self
Appends multiple steps to the workflow.
This is an append operation; existing steps are preserved.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let a = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let b = WorkflowStepEnqueueBuilder::new(StepKey::new("step.b"), JobType::new("jobs.test.b"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.step(a)
.extend_steps(vec![b])
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.steps().len(), 2);Sourcepub fn try_build(self) -> Result<WorkflowRunEnqueue<'a>, WorkflowBuildError>
pub fn try_build(self) -> Result<WorkflowRunEnqueue<'a>, WorkflowBuildError>
Finalizes the builder and returns a validated WorkflowRunEnqueue.
§Errors
Returns WorkflowBuildError if any required field is empty, dependency
keys are invalid, dependencies reference missing steps, or the dependency
graph contains a cycle.
§Examples
use runledger_core::jobs::{JobType, StepKey, WorkflowType, WorkflowRunEnqueueBuilder, WorkflowStepEnqueueBuilder};
let payload = serde_json::json!({});
let metadata = serde_json::json!({});
let step = WorkflowStepEnqueueBuilder::new(StepKey::new("step.a"), JobType::new("jobs.test.a"), &payload)
.try_build()
.expect("step payload should be valid");
let run = WorkflowRunEnqueueBuilder::new(WorkflowType::new("workflow.test"), &metadata)
.step(step)
.try_build()
.expect("workflow payload should be valid");
assert_eq!(run.steps().len(), 1);Trait Implementations§
Source§impl<'a> Clone for WorkflowRunEnqueueBuilder<'a>
impl<'a> Clone for WorkflowRunEnqueueBuilder<'a>
Source§fn clone(&self) -> WorkflowRunEnqueueBuilder<'a>
fn clone(&self) -> WorkflowRunEnqueueBuilder<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more