Finite state machines in rust; bendns fork to add types.
Diffstat (limited to 'rust-fsm-dsl/src/lib.rs')
| -rw-r--r-- | rust-fsm-dsl/src/lib.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/rust-fsm-dsl/src/lib.rs b/rust-fsm-dsl/src/lib.rs index 85fe2f4..3d24a1f 100644 --- a/rust-fsm-dsl/src/lib.rs +++ b/rust-fsm-dsl/src/lib.rs @@ -15,6 +15,7 @@ use crate::{parser::StateMachineDef, variant::Final}; /// The full information about a state transition. Used to unify the /// represantion of the simple and the compact forms. struct Transition<'a> { + attr: &'a [Attribute], initial_state: &'a Variant, input_value: &'a Variant, final_state: &'a Final, @@ -49,6 +50,7 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { let transitions = transitions.iter().flat_map(|def| { def.transitions.iter().map(move |transition| Transition { + attr: &transition.attributes, initial_state: &def.initial_state, input_value: &transition.input_value, final_state: &transition.final_state, @@ -71,6 +73,7 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { ); for transition in transitions { let Transition { + attr, initial_state, final_state, input_value, @@ -134,6 +137,7 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { .unwrap_or(quote! { ::core::option::Option::None }); // let x = format!("{}, {} {} => {}", initial_, input_, guard, output_); transition_cases.push(quote! { + #(#attr)* (Self::#initial_, Self::Input::#input_) #guard => { #[cfg(fsm_debug)] println!("matched {} => {} {}", stringify!(#initial_), stringify!(#input_), stringify!(#guard)); |