statig_macro/
lib.rs

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}