2 releases
Uses old Rust 2015
0.1.1 | Jul 27, 2015 |
---|---|
0.1.0 | Jul 26, 2015 |
#28 in #transition
6KB
130 lines
stator
Clearly manage state transitions using closures in Rust.
Create your state definition struct
struct States;
impl States
{
fn a() -> &'static str { "a" }
fn b() -> &'static str { "b" }
fn c() -> &'static str { "c" }
}
Create a new Stator object, specifying initial state
let mut state = Stator::new(States::a());
Add some state handlers
- Specify
Stator::any_state()
as the first parameter and a custom state as the second to execute on state enter - Specify a custom state as the first parameter and
Stator::any_state()
as the second to execute on state exit - Specify a custom state as both parameters to execute on transition between the two states
- Specify
Stator::any_state()
as both parameters to execute on every state change
state.add_handler(States::a(), States::b(), |from: &String|
{
println!("a -> b");
});
state.add_handler(Stator::any_state(), States::b(), |from: &String|
{
println!("? -> b");
});
state.add_handler(States::a(), Stator::any_state(), |from: &String|
{
println!("a -> ?");
});
state.add_handler(Stator::any_state(), States::a(), |from: &String|
{
println!("? -> a");
});
Enter a new state at any time
Protip: Don't pass Stator::any_state()
to the enter()
method.
state.enter(States::b());
Enjoy the irony
Stator: The stator is the stationary part of a rotary system, found in electric generators, electric motors, sirens, or biological rotors.