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.rs10
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),*
}