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.
Aaron Jost 2022-07-10
parent 61a1af5 · commit 6f603a0
-rw-r--r--rust-fsm-dsl/Cargo.toml5
-rw-r--r--rust-fsm-dsl/src/lib.rs9
-rw-r--r--rust-fsm/Cargo.toml2
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"