feat(wfe-core): add step primitives for workflow control flow
12 step primitives implementing StepBody: DecideStep, IfStep, WhileStep, ForEachStep, SequenceStep, DelayStep, WaitForStep, ScheduleStep, RecurStep, PollEndpointStep, SagaContainerStep, EndStep. Each primitive handles its state machine via persistence_data and branch creation for container steps.
This commit is contained in:
55
wfe-core/src/primitives/mod.rs
Normal file
55
wfe-core/src/primitives/mod.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
pub mod decide;
|
||||
pub mod delay;
|
||||
pub mod end_step;
|
||||
pub mod foreach_step;
|
||||
pub mod if_step;
|
||||
pub mod poll_endpoint;
|
||||
pub mod recur;
|
||||
pub mod saga_container;
|
||||
pub mod schedule;
|
||||
pub mod sequence;
|
||||
pub mod wait_for;
|
||||
pub mod while_step;
|
||||
|
||||
pub use decide::DecideStep;
|
||||
pub use delay::DelayStep;
|
||||
pub use end_step::EndStep;
|
||||
pub use foreach_step::ForEachStep;
|
||||
pub use if_step::IfStep;
|
||||
pub use poll_endpoint::PollEndpointStep;
|
||||
pub use recur::RecurStep;
|
||||
pub use saga_container::SagaContainerStep;
|
||||
pub use schedule::ScheduleStep;
|
||||
pub use sequence::SequenceStep;
|
||||
pub use wait_for::WaitForStep;
|
||||
pub use while_step::WhileStep;
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_helpers {
|
||||
use crate::models::{ExecutionPointer, WorkflowInstance, WorkflowStep};
|
||||
use crate::traits::step::StepExecutionContext;
|
||||
use tokio_util::sync::CancellationToken;
|
||||
|
||||
pub fn make_context<'a>(
|
||||
pointer: &'a ExecutionPointer,
|
||||
step: &'a WorkflowStep,
|
||||
workflow: &'a WorkflowInstance,
|
||||
) -> StepExecutionContext<'a> {
|
||||
StepExecutionContext {
|
||||
item: None,
|
||||
execution_pointer: pointer,
|
||||
persistence_data: pointer.persistence_data.as_ref(),
|
||||
step,
|
||||
workflow,
|
||||
cancellation_token: CancellationToken::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn default_workflow() -> WorkflowInstance {
|
||||
WorkflowInstance::new("test-workflow", 1, serde_json::json!({}))
|
||||
}
|
||||
|
||||
pub fn default_step() -> WorkflowStep {
|
||||
WorkflowStep::new(0, "TestStep")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user