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;