1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
//! # smlang
//!
//! `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.
//!
//! # DSL
//!
//! Please consult the README for the DSL specification.
//!
//! # Examples
//!
//! Please consult the README for examples.
//!
//! # Errors
//!
//! `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.
//!
//! # Panics
//!
//! There are no `panic!` in this library.
//!
//! # Unsafe
//!
//! There is no use of `unsafe` in this library.
//!
//! # Auto-generated types
//!
//! ```ignore
//! // Auto generated enum of states
//! enum States { ... }
//! ```
//!
//! ```ignore
//! // Auto generated enum of possible events
//! enum Events { ... }
//! ```
//!
//! ```ignore
//! // Auto generated struct which holds the state machine implementation
//! struct StateMachine { ... }
//! ```
//!
//! # State machine generated API
//!
//! ```ignore
//! 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>;
//! }
//! ```
#![no_std]
pub use smlang_macros::statemachine;