subplotlib_derive/
lib.rs

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}