use {
self::parse::parse,
proc_macro2::TokenStream,
};
mod codegen;
mod parse;
pub(crate) fn process(
item: TokenStream,
flags: crate::Args,
) -> Result<TokenStream, syn::Error> {
let ast = parse(item)?;
match codegen::codegen(flags, ast) {
| Ok(tokens) => Ok(tokens),
| Err(error) => {
let details = error.get();
let mut syn_error = syn::Error::new(details.span, &details.message);
if let Some(help) = &details.help {
let help_error = syn::Error::new(details.span, format!("help: {help}"));
syn_error.combine(help_error);
}
if let Some(hints) = &details.hints {
let hints_error =
syn::Error::new(details.span, format!("hint: {hints}"));
syn_error.combine(hints_error);
}
Err(syn_error)
},
}
}