use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use syn::{Path, Token, punctuated::Punctuated};
pub fn routes_macro(input: TokenStream) -> TokenStream {
if input.is_empty() {
return quote! { ::std::vec::Vec::new() };
}
let paths: Punctuated<Path, Token![,]> =
match syn::parse::Parser::parse2(Punctuated::parse_terminated, input) {
Ok(paths) => paths,
Err(err) => return err.to_compile_error(),
};
let route_info_calls: Vec<_> = paths
.iter()
.map(|path| {
let mut info_path = path.clone();
if let Some(last) = info_path.segments.last_mut() {
let info_name = format_ident!("__autumn_route_info_{}", last.ident);
last.ident = info_name;
}
quote! { #info_path() }
})
.collect();
quote! {
vec![#(#route_info_calls),*]
}
}