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
use syn::{parse_macro_input, spanned::Spanned};

mod constants;
mod utils;

#[proc_macro_attribute]
pub fn constants(
    attr: proc_macro::TokenStream,
    item: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
    let attr = proc_macro2::TokenStream::from(attr);
    if !attr.is_empty() {
        return syn::Error::new(
            attr.span(),
            "The constants macro does not expect any arguments.",
        )
        .to_compile_error()
        .into();
    }
    // let item = proc_macro2::TokenStream::from(item);
    let parsed = parse_macro_input!(item as constants::ConstantsInput);
    let output: proc_macro2::TokenStream = constants::process(parsed);

    output.into()
}