# 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]
### 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.
## Added
* A type alias `StateMachine` for `rust_fsm::StateMachine<Impl>` is now
generated inside the said module.
## [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.6.2...HEAD
[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