rotor::rotor_compose!
[−]
[src]
macro_rules! rotor_compose { (pub enum $name:ident/$cname:ident <$context_type:ident> { $($x:ident ($y:ty),)* }) => { ... }; (enum $name:ident/$cname:ident <$context_type:ident> { $($x:ident ($y:ty),)* }) => { ... }; (@machine $name:ident/$cname:ident $ctx_typ:ident [ $(<$ctx_name:ident $(: $ctx_bound:ident)*>)* ] $($iname:ident ($itype:ty),)*) => { ... }; }
Compose multiple state machines into single type
Composition requires two types: the state machine itself and Seed which is used to create children state machines.
Mostly because of limitations of Rust macro system composition only works on concrete context type.
Example
rotor_compose!{ pub enum Fsm/Seed<Context> { Http(HttpMachine) Dns(DnsMachine) } }
This creates a an Fsm
state machine type which is enum with two options.
And Seed
state machine type, which is also enum with same option names
but uses <HttpMachine as rotor::Machine>::Seed
for the wrapped type.