Finite state machines in rust; bendns fork to add types.
Added feature to rust-fsm-dsl which adds #[repr(C)] to generated enums and structs so they can be used in FFI applications.
| -rw-r--r-- | rust-fsm-dsl/Cargo.toml | 5 | ||||
| -rw-r--r-- | rust-fsm-dsl/src/lib.rs | 9 | ||||
| -rw-r--r-- | rust-fsm/Cargo.toml | 2 |
3 files changed, 14 insertions, 2 deletions
diff --git a/rust-fsm-dsl/Cargo.toml b/rust-fsm-dsl/Cargo.toml index 4803017..966e818 100644 --- a/rust-fsm-dsl/Cargo.toml +++ b/rust-fsm-dsl/Cargo.toml @@ -8,7 +8,7 @@ readme = "../README.md" license = "MIT" categories = ["data-structures", "rust-patterns"] keywords = ["fsm"] -version = "0.6.0" +version = "0.6.1" authors = ["Yevhenii Babichenko"] edition = "2018" @@ -18,3 +18,6 @@ proc-macro = true [dependencies] syn = "1" quote = "1" + +[features] +repr_c = [] diff --git a/rust-fsm-dsl/src/lib.rs b/rust-fsm-dsl/src/lib.rs index 690dbc6..07ebb69 100644 --- a/rust-fsm-dsl/src/lib.rs +++ b/rust-fsm-dsl/src/lib.rs @@ -32,6 +32,11 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { quote! {} }; + #[cfg(feature = "repr_c")] + let type_repr = quote! { #[repr(C)] }; + #[cfg(not(feature = "repr_c"))] + let type_repr = quote! { }; + if input.transitions.is_empty() { let output = quote! { compile_error!("rust-fsm: at least one state transition must be provided"); @@ -91,6 +96,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 +131,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),* } diff --git a/rust-fsm/Cargo.toml b/rust-fsm/Cargo.toml index 82980ba..4301565 100644 --- a/rust-fsm/Cargo.toml +++ b/rust-fsm/Cargo.toml @@ -18,7 +18,7 @@ std = [] dsl = ["rust-fsm-dsl"] [dependencies] -rust-fsm-dsl = { path = "../rust-fsm-dsl", version = "0.6.0", optional = true } +rust-fsm-dsl = { path = "../rust-fsm-dsl", version = "0.6.1", optional = true } [profile.dev] panic = "abort" |