flowstate 0.8.2

Workflow runtime powered by finite state machines.
Documentation
use flowstate::prelude::*;

#[derive(Workflow)]
#[flowstate(
    result = usize,
    state_trait = CountLengthOfVecWorkflowState,
)]
struct CountLengthOfVecWorkflow<State> {
    #[state]
    state: State,
    vec: Vec<u8>,
}

#[derive(State)]
struct Count(usize);

impl CountLengthOfVecWorkflowState for CountLengthOfVecWorkflow<Count> {
    fn next(mut self: Box<Self>) -> StaticTransition<usize> {
        let current_count = self.state.0;

        if self.vec.pop().is_some() {
            self.transition(Count(current_count + 1))
        } else {
            self.finish(current_count)
        }
    }
}

#[test]
fn test_looping_workflow() {
    let workflow = CountLengthOfVecWorkflow::new(Count(0), vec![1, 2, 3, 4]);

    let result = workflow.run();

    assert_eq!(result, 4);
}