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 parsed = parse_macro_input!(item as constants::ConstantsInput);
    let output: proc_macro2::TokenStream = constants::process(parsed);
    output.into()
}