1extern crate proc_macro;
2extern crate quote;
3extern crate syn;
4
5use proc_macro::TokenStream;
6use proc_macro_error2::proc_macro_error;
7
8mod analyze;
9mod codegen;
10mod lower;
11mod parse;
12mod visitors;
13
14use analyze::analyze;
15use codegen::codegen;
16use lower::lower;
17use parse::{parse_args, parse_input};
18
19const SUPERSTATE_LIFETIME: &str = "'sub";
20const EVENT_LIFETIME: &str = "'event";
21const CONTEXT_LIFETIME: &str = "'context";
22
23#[proc_macro_error]
24#[proc_macro_attribute]
25pub fn state_machine(args: TokenStream, input: TokenStream) -> TokenStream {
26 let attribute_args = parse_args(args.into());
27 let item_impl = parse_input(input.into());
28 let model = analyze(attribute_args, item_impl);
29 let ir = lower(&model);
30 let rust = codegen(ir);
31 rust.into()
32}
33
34#[proc_macro_attribute]
35pub fn state(_: TokenStream, input: TokenStream) -> TokenStream {
36 input
37}
38
39#[proc_macro_attribute]
40pub fn superstate(_: TokenStream, input: TokenStream) -> TokenStream {
41 input
42}
43
44#[proc_macro_attribute]
45pub fn action(_: TokenStream, input: TokenStream) -> TokenStream {
46 input
47}