Expand description

Generic state machine implementation with compile time checked state transitions.


  • Convenience functions for unit testing. Note: Do ONLY use in tests!


  • Defines a state machine’s initial state and its allowed transitions. Optionally, a state machine enum type can be generated. Example:


  • Wrapper struct for a state S. Use in combination with StateTransition.
  • Wrapper to safely replace states of state machine which don’t consume their states. Use this wrapper if state transitions are performed on mutable references rather than consumed states. Example:
  • Wrapper struct to enforce compile time checked state transitions of one state into another.


  • Marker for creating a new initial state. This trait enforces that only the initial state can be created manually while all others must be created through a proper state transition.
  • A StateTransition defines valid transitions from one state into another. Implement StateTransition on the given State struct to define a new state transition. Alternatively, use the convenience macro statemachine!.