Finite state machines in rust; bendns fork to add types.

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.8.0 - 2025-07-21

Changed

  • Updated aquamarine from 0.5 to 0.6.

0.7.0 - 2024-06-01

Changed

  • All types generated by the state_machine macro are now confined in a module. The name of the module is passed to the macro as the name of the state machine. All generated types now have uniforms names: Impl, Input, State, Output.
  • If no outputs is specified in the state_machine macro, an empty Output enum is generated instead of using () for the sake of uniformity. No attributes (e.g. derive and repr) are applied on an empty Output, because many of them are simply not designed to work this way.
  • It is now possible to use proper Rust attributes like #[derive(Debug)], #[repr(C)], etc (any attribute you want really). This replaces the original way this macro had for using derives and specifying representation.
  • Use Rust 2021 edition.

Added

  • A type alias StateMachine for rust_fsm::StateMachine<Impl> is now generated inside the said module.
  • Supplying ones own enums for state, input and output in the proc-macro (#10).
  • An optional possibility to generate Mermaid diagrams.
  • Processing doc comments to generate the state machine module documentation.

0.6.2 - 2024-05-11

Changed

  • Update documentation.

Added

  • Derive Debug and Clone for StateMachine struct

0.6.1 - 2022-12-24

Changed

  • Use pattern matching in examples.

Added

  • Allow to specify repr(C) on generated enums.

0.6.0 - 2021-08-24

Changed

  • Updated to 1.x versions of syn and quote.

0.5.0 - 2021-02-23

Added

  • The re-export of the DSL implementation is gated by the dsl feature which is enabled by default.

Changed

  • State transition error is now represented with TransitionImpossibleError instead of ().
  • The library is not no_std by default due to the use of std::error::Error. Users should disable the new std feature to use this library in a no_std environment.

0.4.0 - 2020-08-25

Added

  • Allow deriving different traits for generated traits.
  • Add the from_state method to start the machine from any given state.
  • no_std support (thanks @luctius).

Removed

  • All default derives on generated enums.
  • Copy constraint on StateMachineImpl::State.

0.3.0 - 2019-05-22

Changed

  • Re-organize repository to import a single crate instead of two.

0.2.0 - 2019-05-16

Added

  • Allow setting visibitility for generated state machine types by putting a visibility modifier before the state machine name.
  • Allow to specify multiple transitions from the same state in a more compact form. See the example for the details.

Changed

  • More clear naming:
  • Renamed the StateMachineWrapper structure to StateMachine;
  • Renamed the StateMachine trait to StateMachineImpl.

Removed

  • Removed the consume_anyway function.

0.1.0 - 2019-04-29

Added

  • The StateMachine trait for formal definitions of state machines and transducers.
  • The StateMachineWrapper struct - a convenience wrapper around StateMachine for practical usage.
  • The first implementation of the DSL for defining state machines that allows to:
  • Define a state machine with its initial state;
  • Define state transitions;
  • Define outputs;
  • Generate boilerplates implementing StateMachine.