use super::state::{StartWorkflowState, WorkflowState};
#[derive(Clone)]
pub struct SubWorkflow {
name: String,
states: Vec<WorkflowState>,
start_state: Option<StartWorkflowState>,
}
impl SubWorkflow {
pub fn name(&self) -> &str {
&self.name
}
pub fn state(&self, name: &str) -> Option<WorkflowState> {
for state in &self.states {
if state.name() == name {
return Some(state.clone());
}
}
None
}
pub fn start_state(&self) -> Option<&StartWorkflowState> {
self.start_state.as_ref()
}
}
#[derive(Default)]
pub struct SubWorkflowBuilder {
name: String,
states: Vec<WorkflowState>,
start_state: Option<StartWorkflowState>,
}
impl SubWorkflowBuilder {
pub fn new(name: &str) -> Self {
Self {
name: name.to_string(),
..Self::default()
}
}
pub fn add_state(mut self, state: WorkflowState) -> Self {
self.states.push(state);
self
}
pub fn with_start_state(mut self, start_state: StartWorkflowState) -> Self {
self.start_state = Some(start_state);
self
}
pub fn build(self) -> SubWorkflow {
SubWorkflow {
name: self.name,
states: self.states,
start_state: self.start_state,
}
}
}