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.rs4
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));