pub struct WorkflowBuilder { /* private fields */ }Expand description
Fluent builder for constructing workflows.
WorkflowBuilder provides a chainable API for creating workflows with multiple tasks and dependencies between them.
§Example
use forge_agent::workflow::{WorkflowBuilder, MockTask, TaskId};
let workflow = WorkflowBuilder::new()
.add_task(Box::new(MockTask::new("a", "Task A")))
.add_task(Box::new(MockTask::new("b", "Task B")))
.add_task(Box::new(MockTask::new("c", "Task C")))
.dependency(TaskId::new("a"), TaskId::new("b"))
.dependency(TaskId::new("b"), TaskId::new("c"))
.build()
.unwrap();Implementations§
Source§impl WorkflowBuilder
impl WorkflowBuilder
Sourcepub fn with_auto_detect(self, forge: &Forge) -> Self
pub fn with_auto_detect(self, forge: &Forge) -> Self
Configures the builder with a Forge instance for auto-detection.
§Arguments
forge- Forge instance for graph-based dependency detection
§Returns
Self for method chaining
§Example
let builder = WorkflowBuilder::new()
.with_auto_detect(&forge)
.add_task(Box::new(GraphQueryTask::find_symbol("main")));Sourcepub fn add_task(self, task: Box<dyn WorkflowTask>) -> Self
pub fn add_task(self, task: Box<dyn WorkflowTask>) -> Self
Sourcepub fn dependency(self, from: TaskId, to: TaskId) -> Self
pub fn dependency(self, from: TaskId, to: TaskId) -> Self
Adds a dependency between two tasks.
Creates a directed edge from from to to, indicating that to
depends on from (from must execute first).
§Arguments
from- Task ID of the prerequisite (executes first)to- Task ID of the dependent (executes after)
§Returns
Self for method chaining
§Note
Dependencies are validated when build is called.
Invalid dependencies (cycles, missing tasks) will cause build to fail.
§Example
let builder = WorkflowBuilder::new()
.add_task(Box::new(MockTask::new("a", "Task A")))
.add_task(Box::new(MockTask::new("b", "Task B")))
.dependency(TaskId::new("a"), TaskId::new("b"));Sourcepub fn build(self) -> Result<Workflow, WorkflowError>
pub fn build(self) -> Result<Workflow, WorkflowError>
Builds the workflow from configured tasks and dependencies.
§Returns
Ok(Workflow)- If workflow is validErr(WorkflowError)- If validation fails (cycles, missing tasks, empty)
§Errors
WorkflowError::EmptyWorkflow- No tasks were addedWorkflowError::CycleDetected- Dependencies contain a cycleWorkflowError::TaskNotFound- Dependency references non-existent task
§Example
let workflow = WorkflowBuilder::new()
.add_task(Box::new(MockTask::new("task-1", "Task")))
.build()
.unwrap();Sourcepub async fn build_auto_detect(self) -> Result<Workflow, WorkflowError>
pub async fn build_auto_detect(self) -> Result<Workflow, WorkflowError>
Builds the workflow with automatic dependency detection.
This method builds the workflow, runs dependency detection using the stored Forge instance, applies high-confidence suggestions, and validates the completed workflow.
§Returns
Ok(Workflow)- Valid workflow with auto-detected dependenciesErr(WorkflowError)- If validation fails or no Forge configured
§Errors
WorkflowError::EmptyWorkflow- No tasks were addedWorkflowError::CycleDetected- Auto-detection created a cycleWorkflowError::TaskNotFound- Dependency references non-existent task
§Example
let workflow = WorkflowBuilder::new()
.with_auto_detect(&forge)
.add_task(Box::new(GraphQueryTask::find_symbol("process_data")))
.add_task(Box::new(GraphQueryTask::references("process_data")))
.build_auto_detect()
.await?;Sourcepub fn sequential(
tasks: Vec<Box<dyn WorkflowTask>>,
) -> Result<Workflow, WorkflowError>
pub fn sequential( tasks: Vec<Box<dyn WorkflowTask>>, ) -> Result<Workflow, WorkflowError>
Creates a sequential workflow from a list of tasks.
Tasks are executed in the order provided, with each task depending on the previous task.
§Arguments
tasks- Vector of boxed trait objects in execution order
§Returns
Ok(Workflow)- If workflow is validErr(WorkflowError)- If tasks vector is empty
§Example
let workflow = WorkflowBuilder::sequential(vec![
Box::new(MockTask::new("step-1", "Step 1")),
Box::new(MockTask::new("step-2", "Step 2")),
Box::new(MockTask::new("step-3", "Step 3")),
]).unwrap();Trait Implementations§
Auto Trait Implementations§
impl Freeze for WorkflowBuilder
impl !RefUnwindSafe for WorkflowBuilder
impl Send for WorkflowBuilder
impl Sync for WorkflowBuilder
impl Unpin for WorkflowBuilder
impl UnsafeUnpin for WorkflowBuilder
impl !UnwindSafe for WorkflowBuilder
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> 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