1use nanomachine::Machine;
4
5fn main() {
6 let mut nano = Machine::new("locked");
7
8 nano.when("insert coin", "locked", "unlocked");
10 nano.when("turn knob", "unlocked", "locked");
11
12 nano.on_enter("unlocked", |e| println!("Unlocked via {:?}", e));
14 nano.on_enter("locked", |e| println!("Locked via {:?}", e));
15
16 nano.on_enter_with("unlocked", |e, amount: &u32| {
18 println!("Received {} cents via {:?}", amount, e);
19 });
20
21 nano.on_transition(|e| println!("Global - event {:?}", e));
23 nano.on_transition_with(|e, amount: &u32| {
24 println!("Global - saw {} cents via {:?}", amount, e);
25 });
26 nano.on_transition_with(|e, msg: &String| {
27 println!("Global - saw \"{}\" via {:?}", msg, e);
28 });
29
30 nano.trigger(&"insert coin").unwrap();
34
35 nano.trigger_with(&"turn knob", &"voucher".to_string()).unwrap();
40
41 nano.trigger_with(&"insert coin", &50u32).unwrap();
47
48 println!("Final state: {:?}", nano.state());
50}