# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog][keepachangelog], and this project adheres to [Semantic Versioning][semver]. ## [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` 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`. [keepachangelog]: https://keepachangelog.com/en/1.0.0/ [semver]: https://semver.org/spec/v2.0.0.html [Unreleased]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.8.0...HEAD [0.8.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.8.0...v0.7.0 [0.7.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.7.0...v0.6.2 [0.6.2]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.6.2...v0.6.1 [0.6.1]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.2.0...0.3.0 [0.2.0]: https://github.com/eugene-babichenko/rust-fsm/compare/v0.1.0...0.2.0 [0.1.0]: https://github.com/eugene-babichenko/rust-fsm/releases/tag/v0.1.0