1use codegen::do_codegen;
2use proc_macro::TokenStream;
3use syn::parse_macro_input;
4
5mod codegen;
6mod step;
7
8#[proc_macro_attribute]
9pub fn step(_attr: TokenStream, item: TokenStream) -> TokenStream {
10 let input = parse_macro_input!(item as step::StepFn);
11
12 if let Err(e) = step::check_step_declaration(&input) {
13 return e.to_compile_error().into();
14 }
15
16 match step::process_step(input) {
17 Ok(toks) => toks.into(),
18 Err(e) => e.to_compile_error().into(),
19 }
20}
21
22#[proc_macro]
23pub fn codegen(input: TokenStream) -> TokenStream {
24 let input = parse_macro_input!(input as codegen::CodegenArgs);
25
26 match do_codegen(input) {
27 Ok(toks) => toks.into(),
28 Err(e) => e.to_compile_error().into(),
29 }
30}