state_machine

Example:

```rust use Machine; use StateMachine;

[derive(Eq, PartialEq, Hash, Debug)]

enum States { Empty, Move, Music, Last }

[derive(Eq, PartialEq, Debug)] struct Empty;

[derive(Eq, PartialEq, Debug)] struct Move;

[derive(Eq, PartialEq, Debug)] struct Music;

impl Machine for Empty { fn update(&self, state: &mut States) -> bool { println!("Empty state"); *state = States::Music; true } }

impl Machine for Music { fn on_enter(&self, _: &mut States) -> bool { println!("\nOn enter music state"); true }

fn update(&self, state: &mut States) -> bool {
    println!("Music state");
    *state = States::Move;
    true
}

}

impl Machine for Move { fn update(&self, _: &mut States) -> bool { println!("\nStop state"); true }

fn on_exit(&self, _: &mut States) -> bool {
    println!("On exit move state");
    false
}

}

fn main() { let mut state = StateMachine::new(States::Empty); state.add(States::Music, Box::new(Music)); state.add(States::Empty, Box::new(Empty)); state.add(States::Move, Box::new(Move));

// Empty state
state.next();

// On enter music state
// Music state
//
// Stop state
// On exit move state
let _ = state.run();

} ```