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 | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/rust_fsm_dsl/src/lib.rs b/rust_fsm_dsl/src/lib.rs index 7bf2a7e..449c703 100644 --- a/rust_fsm_dsl/src/lib.rs +++ b/rust_fsm_dsl/src/lib.rs @@ -13,7 +13,7 @@ use syn::{ parse_macro_input, punctuated::Punctuated, token::Bracket, - Ident, Token, + Ident, Token, Visibility, }; struct TransitionDef { @@ -48,6 +48,7 @@ impl Parse for TransitionDef { } struct StateMachineDef { + visibility: Visibility, name: Ident, initial_state: Ident, transitions: Punctuated<TransitionDef, Token![,]>, @@ -55,12 +56,14 @@ struct StateMachineDef { impl Parse for StateMachineDef { fn parse(input: ParseStream) -> Result<Self> { + let visibility = input.parse()?; let name = input.parse()?; let initial_state_content; parenthesized!(initial_state_content in input); let initial_state = initial_state_content.parse()?; let transitions = input.parse_terminated(TransitionDef::parse)?; Ok(Self { + visibility, name, initial_state, transitions, @@ -80,6 +83,7 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { } let struct_name = input.name; + let visibility = input.visibility; let mut states = HashSet::new(); let mut inputs = HashSet::new(); @@ -117,7 +121,7 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { let outputs_type_name = Ident::new(&format!("{}Output", struct_name), struct_name.span()); let outputs_repr = quote! { #[derive(Debug, PartialEq)] - enum #outputs_type_name { + #visibility enum #outputs_type_name { #(#outputs),* } }; @@ -150,15 +154,15 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { }; let output = quote! { - struct #struct_name; + #visibility struct #struct_name; #[derive(Clone, Copy, Debug, PartialEq)] - enum #states_enum_name { + #visibility enum #states_enum_name { #(#states),* } #[derive(Debug, PartialEq)] - enum #inputs_enum_name { + #visibility enum #inputs_enum_name { #(#inputs),* } |