8 releases (breaking)
0.9.0 | Nov 9, 2019 |
---|---|
0.7.0 | Oct 4, 2018 |
0.6.1 | Sep 18, 2018 |
0.5.0 | Sep 11, 2018 |
0.1.0 | Sep 1, 2018 |
#26 in #fsm
60,310 downloads per month
Used in 3 crates
(2 directly)
24KB
85 lines
SM aims to be a safe, fast and simple state machine library.
-
safe — Rust's type system, ownership model and exhaustive pattern matching prevent you from mis-using your state machines
-
fast — zero runtime overhead, the machine is 100% static, all validation happens at compile-time
-
simple — five traits, and one optional declarative macro, control-flow only, no business logic attached
You might be looking for:
Quick Example
extern crate sm;
use sm::sm;
sm! {
Lock {
InitialStates { Locked }
TurnKey {
Locked => Unlocked
Unlocked => Locked
}
Break {
Locked, Unlocked => Broken
}
}
}
fn main() {
use Lock::*;
let lock = Machine::new(Locked);
let lock = lock.transition(TurnKey);
assert_eq!(lock.state(), Unlocked);
assert_eq!(lock.trigger().unwrap(), TurnKey);
}
Dependencies
~0–285KB