macro-machines
State machine macros with logging and graphviz dotfile generation
The macros provided by this library expand to definitions using const fn
s and
some intrinsics to help generate dotfiles, so these features must be enabled in
the crate root:
```rust
```
Define and use a minimal state machine:
```rust
defmachinedebug!{
machine M {
STATES [
state S ()
state T ()
]
EVENTS [
event A =>
fn main () { use macro_machines::HandleEventException;
let mut m = M::initial(); let e = Event::fromid (EventId::A); m.handleevent (e).unwrap(); let e = Event::fromid (EventId::A); asserteq!(m.handle_event (e), Err (HandleEventException::WrongState)); } ```
Generate a dotfile and write to file:
rust
use std::io::Write;
use macro_machines::MachineDotfile;
let mut f = std::fs::File::create ("minimal.dot").unwrap();
f.write_all (M::dotfile().as_bytes()).unwrap();
drop (f);
Rendered as PNG with $ dot -Tpng minimal.dot > minimal.png
:
For examples of more complex state machines, see the ./examples/
directory.