Expand description
A simple and effective state machine library, written in in idiomatic, 100% safe, stable Rust code.
This library provides three main types, Automaton, Mode, and Family, which facilitate the creation of finite
state machines. An Automaton can be used to quickly create a state machine over some Family of concrete types
that implement the Mode trait. This can contain either:
- a single, concrete type representing all states in the state machine, e.g. a
structor anenum, or - one or more separate types that all implement some common
dyn Trait, with each type representing a distinct state in the state machine.
The Automaton keeps track of a current instance of Mode, and provides external access to any members that are
common to all Modes in the Family. A flexible transition system provides a way to swap in a new Mode in the
same Family, when ready, and is designed such that state from the current Mode can be moved directly into the
new Mode being created. This can help prevent spikes in memory usage when transitioning between Modes that own
large amounts of data.
§Examples
- For a simple example of how to use this library to implement a simple state machine over a single, concrete type,
please see
examples/enum.rs. - For a more advanced example demonstrating a state machine over several types in the same
Family, please seeexamples/activity.rs. - For an example demonstrating how to pass context into and out of transition functions, please see
examples/turing.rs.
You can run the examples using the following Cargo commands:
cargo run --example enum
cargo run --example activity
cargo run --example turing§Getting started
A good place to start reading would be the Automaton documentation, followed by
Mode and then Family.
Structs§
- Automaton
- Represents a state machine over a set of
Modes within the sameFamily.
Traits§
- Family
- A meta-
traitdefining the commonBasetype andModestorage conventions used by a related group ofModeimplementations.Modes can only transition to otherModes within the sameFamily, i.e. where bothModes share the sameFamilyassociatedtype. - Mode
- Trait that defines a state within some
Family, and can be made active in anAutomaton.