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 | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/rust-fsm-dsl/src/lib.rs b/rust-fsm-dsl/src/lib.rs index 690dbc6..ba4ef46 100644 --- a/rust-fsm-dsl/src/lib.rs +++ b/rust-fsm-dsl/src/lib.rs @@ -32,6 +32,12 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { quote! {} }; + let type_repr = if let Some(true) = input.repr_c { + quote! { #[repr(C)] } + } else { + quote! {} + }; + if input.transitions.is_empty() { let output = quote! { compile_error!("rust-fsm: at least one state transition must be provided"); @@ -91,6 +97,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! { #derives + #type_repr #visibility enum #outputs_type_name { #(#outputs),* } @@ -125,14 +132,17 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { let output = quote! { #derives + #type_repr #visibility struct #struct_name; #derives + #type_repr #visibility enum #states_enum_name { #(#states),* } #derives + #type_repr #visibility enum #inputs_enum_name { #(#inputs),* } |