chemin_macros/
lib.rs

1//! This is the proc-macro crate associated to [chemin](https://docs.rs/chemin). See [chemin](https://docs.rs/chemin) for documentation.
2
3mod derive_chemin;
4mod helpers;
5
6use proc_macro::TokenStream;
7
8fn chemin_crate() -> proc_macro2::TokenStream {
9    use proc_macro2::{Ident, Span};
10    use proc_macro_crate::FoundCrate;
11    use quote::quote;
12
13    match proc_macro_crate::crate_name("chemin").unwrap() {
14        FoundCrate::Itself => quote!(::chemin),
15
16        FoundCrate::Name(name) => {
17            let ident = Ident::new(&name, Span::call_site());
18            quote!(::#ident)
19        }
20    }
21}
22
23#[proc_macro_derive(Chemin, attributes(route, query_param))]
24pub fn derive_chemin(item: TokenStream) -> TokenStream {
25    derive_chemin::derive_chemin(item.into(), &chemin_crate()).into()
26}