1use syn::{parse_macro_input, spanned::Spanned};
2
3mod constants;
4mod utils;
5
6#[proc_macro_attribute]
7pub fn constants(
8 attr: proc_macro::TokenStream,
9 item: proc_macro::TokenStream,
10) -> proc_macro::TokenStream {
11 let attr = proc_macro2::TokenStream::from(attr);
12 if !attr.is_empty() {
13 return syn::Error::new(
14 attr.span(),
15 "The constants macro does not expect any arguments.",
16 )
17 .to_compile_error()
18 .into();
19 }
20 let parsed = parse_macro_input!(item as constants::ConstantsInput);
22 let output: proc_macro2::TokenStream = constants::process(parsed);
23
24 output.into()
25}