1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
extern crate proc_macro;
extern crate proc_macro2;
extern crate syn;
extern crate quote;
use codegen::generate_fsm_code;
use parse::FsmFnInput;
use proc_macro::TokenStream;
mod codegen;
mod codegen_meta;
mod meta;
mod parse;
mod parse_blocks;
mod parse_fsm;
mod utils;
mod validation;
mod fsm;
#[proc_macro_attribute]
pub fn finny_fsm(attr: TokenStream, item: TokenStream) -> TokenStream {
let attr2: proc_macro2::TokenStream = attr.into();
let item2: proc_macro2::TokenStream = item.into();
let parsed = match FsmFnInput::parse(attr2.clone(), item2.clone()) {
Ok(p) => p,
Err(e) => return e.to_compile_error().into()
};
match generate_fsm_code(&parsed, attr2.clone(), item2.clone()) {
Ok(t) => t.into(),
Err(e) => e.to_compile_error().into()
}
}