use proc_macro::TokenStream;
use proc_macro2::TokenStream as TokenStream2;
use syn::{Error, Result};
mod handler;
mod router;
#[proc_macro]
pub fn router(input: TokenStream) -> TokenStream {
compile(router::expand(input.into()))
}
#[proc_macro_attribute]
pub fn handler(attr: TokenStream, item: TokenStream) -> TokenStream {
if !attr.is_empty() {
return Error::new(
proc_macro2::Span::call_site(),
"`handler` does not accept arguments",
)
.into_compile_error()
.into();
}
compile(handler::expand(item.into()))
}
fn compile(result: Result<TokenStream2>) -> TokenStream {
result.unwrap_or_else(Error::into_compile_error).into()
}