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.rs25
1 files changed, 7 insertions, 18 deletions
diff --git a/rust-fsm-dsl/src/lib.rs b/rust-fsm-dsl/src/lib.rs
index 3d82364..ce1e5b5 100644
--- a/rust-fsm-dsl/src/lib.rs
+++ b/rust-fsm-dsl/src/lib.rs
@@ -5,8 +5,8 @@
extern crate proc_macro;
use proc_macro::TokenStream;
-use quote::quote;
-use std::collections::BTreeSet;
+use quote::{quote, ToTokens};
+use std::{collections::BTreeSet, iter::FromIterator};
use syn::{parse_macro_input, Ident};
mod parser;
@@ -26,17 +26,11 @@ struct Transition<'a> {
pub fn state_machine(tokens: TokenStream) -> TokenStream {
let input = parse_macro_input!(tokens as parser::StateMachineDef);
- let derives = if let Some(derives) = input.derives {
- quote! { #[derive(#(#derives,)*)] }
- } else {
- quote! {}
- };
-
- let type_repr = if let Some(true) = input.repr_c {
- quote! { #[repr(C)] }
- } else {
- quote! {}
- };
+ let attrs = input
+ .attributes
+ .into_iter()
+ .map(ToTokens::into_token_stream);
+ let attrs = proc_macro2::TokenStream::from_iter(attrs);
if input.transitions.is_empty() {
let output = quote! {
@@ -103,11 +97,6 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream {
}
}
- let attrs = quote! {
- #derives
- #type_repr
- };
-
// Many attrs and derives may work incorrectly (or simply not work) for
// empty enums, so we just skip them altogether if the output alphabet is
// empty.