Macro apis::def_machine
[−]
macro_rules! def_machine { ( machine $ machine : ident $ ( < $ ( $ type_var : ident $ ( : { $ ( $ type_constraint : path ) , + } ) * ) , + > ) * { STATES [ $ ( state $ state : ident ( $ ( $ data_name : ident : $ data_type : ty $ ( = $ data_default : expr ) * ) , * ) ) + ] EVENTS [ $ ( event $ event : ident < $ source : tt > $ ( => < $ target : ident > ) * ( $ ( $ param_name : ident : $ param_type : ty $ ( = $ param_default : expr ) * ) , * ) $ ( { $ ( $ state_data : ident ) , * } => $ action : block ) * ) + ] EXTENDED [ $ ( $ ext_name : ident : $ ext_type : ty $ ( = $ ext_default : expr ) * ) , * ] $ ( self_reference : $ self_reference : ident ) * initial_state : $ initial : ident $ ( { $ ( initial_action : $ initial_action : block ) * } ) * $ ( terminal_state : $ terminal : ident $ ( { $ ( terminate_success : $ terminate_success : block ) * $ ( terminate_failure : $ terminate_failure : block ) * } ) * ) * } ) => { ... }; ( $ machine : ident $ ( < $ ( $ type_var : ident $ ( : { $ ( $ type_constraint : path ) , + } ) * ) , + > ) * $ ( ( $ ( $ ext_name : ident : $ ext_type : ty $ ( = $ ext_default : expr ) * ) , * ) ) * $ ( @ $ self_reference : ident ) * { STATES [ $ ( state $ state : ident ( $ ( $ data_name : ident : $ data_type : ty $ ( = $ data_default : expr ) * ) , * ) ) + ] EVENTS [ $ ( event $ event : ident < $ source : tt > $ ( => < $ target : ident > ) * ( $ ( $ param_name : ident : $ param_type : ty $ ( = $ param_default : expr ) * ) , * ) $ ( { $ ( $ state_data : ident ) , * } => $ action : block ) * ) + ] initial_state : $ initial : ident $ ( { $ ( initial_action : $ initial_action : block ) * } ) * $ ( terminal_state : $ terminal : ident $ ( { $ ( terminate_success : $ terminate_success : block ) * $ ( terminate_failure : $ terminate_failure : block ) * } ) * ) * } ) => { ... }; ( @ impl_fn_handle_event machine $ machine : ident { STATES [ $ ( state $ state : ident ( $ ( $ data_name : ident : $ data_type : ty $ ( = $ data_default : expr ) * ) , * ) ) + ] EVENTS [ $ ( event $ event : ident < $ source : tt > $ ( => < $ target : ident > ) * ( $ ( $ param_name : ident ) , * ) $ ( { $ ( $ state_data : ident ) , * } => $ action : block ) * ) + ] EXTENDED [ $ ( $ ext_name : ident : $ ext_type : ty $ ( = $ ext_default : expr ) * ) , * ] $ ( self_reference : $ self_reference : ident ) * } ) => { ... }; ( @ event_internal_state_pattern $ source : ident { $ ( $ state_data : ident ) , * } ) => { ... }; ( @ event_internal_state_pattern * { $ ( $ state_data : ident ) , * } ) => { ... }; ( @ event_action_external event $ event : ident < $ source : ident > => < $ target : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_action_external event $ event : ident < $ source : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_action_external event $ event : ident < * > => < $ target : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_action_universal event $ event : ident < * > => < $ target : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_action_universal event $ event : ident < $ source : ident > $ ( => < $ target : ident > ) * $ ( $ action : block ) * ) => { ... }; ( @ event_action_internal event $ event : ident < $ source : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_action_internal event $ event : ident < $ source : tt > => < $ target : ident > $ ( $ action : block ) * ) => { ... }; ( @ event_transition < $ source : ident > => < $ target : ident > ) => { ... }; ( @ event_transition < $ source : ident > ) => { ... }; ( @ event_transition < * > => < $ target : ident > ) => { ... }; ( @ expr_default $ default : expr ) => { ... }; ( @ expr_default ) => { ... }; ( @ expr_option $ default : expr ) => { ... }; ( @ expr_option ) => { ... }; ( @ base machine $ machine : ident $ ( < $ ( $ type_var : ident $ ( : { $ ( $ type_constraint : path ) , + } ) * ) , + > ) * { STATES [ $ ( state $ state : ident ( $ ( $ data_name : ident : $ data_type : ty $ ( = $ data_default : expr ) * ) , * ) ) + ] EVENTS [ $ ( event $ event : ident < $ source : tt > $ ( => < $ target : ident > ) * ( $ ( $ param_name : ident : $ param_type : ty $ ( = $ param_default : expr ) * ) , * ) $ ( { $ ( $ state_data : ident ) , * } => $ action : block ) * ) + ] EXTENDED [ $ ( $ ext_name : ident : $ ext_type : ty $ ( = $ ext_default : expr ) * ) , * ] $ ( self_reference : $ self_reference : ident ) * initial_state : $ initial : ident $ ( { $ ( initial_action : $ initial_action : block ) * } ) * $ ( terminal_state : $ terminal : ident $ ( { $ ( terminate_success : $ terminate_success : block ) * $ ( terminate_failure : $ terminate_failure : block ) * } ) * ) * } ) => { ... }; }
State machines with a default initial
state.
For each extended state field, either the type must implement Default
, or
else a default expression is provided following =
.
For a state machine that requires runtime initialization, see
def_machine_nodefault!
.