use proc_macro2::{Span, TokenStream};
use proc_macro_crate::{crate_name, FoundCrate};
use quote::{quote, ToTokens};
#[derive(Clone, Debug)]
pub(crate) struct MacroPath {
crate_name: syn::Ident,
module_name: syn::Ident,
}
impl MacroPath {
const CRATE_NAME: &'static str = "delegation";
const MODULE_NAME: &'static str = "private";
}
impl Default for MacroPath {
fn default() -> Self {
let crate_name = crate_name(Self::CRATE_NAME)
.unwrap_or_else(|_| unreachable!("can't find macro definition"));
let crate_name = match &crate_name {
FoundCrate::Name(name) => name.as_str(),
FoundCrate::Itself => Self::CRATE_NAME,
};
Self {
crate_name: syn::Ident::new(crate_name, Span::call_site()),
module_name: syn::Ident::new(Self::MODULE_NAME, Span::call_site()),
}
}
}
impl ToTokens for MacroPath {
fn to_tokens(&self, tokens: &mut TokenStream) {
let crate_name = &self.crate_name;
let module_name = &self.module_name;
quote! { ::#crate_name ::#module_name }.to_tokens(tokens);
}
}