Expand description


smlang is a procedural macro library creating a state machine language DSL is to facilitate the use of state machines, as they quite fast can become overly complicated to write and get an overview of.

Project dependent documentation

When this crate is used in a project the documentation will be auto generated in the documentation of the project, this comes from the procedural macro also generating documentation.


Please consult the README for the DSL specification.


Please consult the README for examples.


StateMachine::process_event will return Ok(NextState) if the transition was successful, or Err(Error::GuardFailed) if the guard failed, or Err(Error::InvalidEvent) if an event which should not come at this stage of the state machine was processed.


There are no panic! in this library.


There is no use of unsafe in this library.

Auto-generated types

// Auto generated enum of states
enum States { ... }
// Auto generated enum of possible events
enum Events { ... }
// Auto generated struct which holds the state machine implementation
struct StateMachine { ... }

State machine generated API

struct StateMachine {
    /// Creates a state machine with the starting state
    pub fn new() -> Self;

    /// Returns the current state
    pub fn state(&self) -> States;

    /// Process an event
    pub fn process_event(&mut self, event: Events) -> Result<States, Error>;