statum-macros 0.7.0

Proc macros for representing legal workflow and protocol states explicitly in Rust
Documentation
#![allow(unused_imports)]
extern crate self as statum;
pub use statum_macros::__statum_emit_validator_methods_impl;
pub use statum_core::__private;
pub use statum_core::TransitionInventory;
pub use statum_core::{
    CanTransitionMap, CanTransitionTo, CanTransitionWith, DataState, Error, MachineDescriptor,
    MachineGraph, MachineIntrospection, MachineStateIdentity, RebuildAttempt, RebuildReport, StateDescriptor, StateMarker,
    TransitionDescriptor, UnitState,
};
pub use statum_core::Result;


use statum_macros::{machine, state, transition};


mod alpha {
    use super::*;

    #[state]
    pub enum State {
        Off,
        On,
    }

    #[machine]
    pub struct Machine<State> {
        id: u8,
    }

    #[transition]
    impl Machine<Off> {
        pub fn turn_on(self) -> Machine<On> {
            self.transition()
        }
    }
}

mod beta {
    use super::*;

    #[state]
    pub enum State {
        Idle,
        Running,
    }

    #[machine]
    pub struct Machine<State> {
        name: String,
    }

    #[transition]
    impl Machine<Idle> {
        pub fn start(self) -> Machine<Running> {
            self.transition()
        }
    }
}

fn main() {
    let left = alpha::Machine::<alpha::Off>::builder().id(1).build();
    let right = beta::Machine::<beta::Idle>::builder()
        .name("job".to_string())
        .build();

    let _ = left.turn_on();
    let _ = right.start();
}