use proc_macro2::{Ident, Span, TokenStream};
use proc_macro_crate::{crate_name, FoundCrate};
use quote::quote;
pub fn db_path() -> TokenStream {
resolve("db", "axumstart_db")
}
pub fn components_path() -> TokenStream {
resolve("components", "axumstart_components")
}
fn resolve(submodule: &str, direct_crate: &str) -> TokenStream {
if let Ok(FoundCrate::Name(name)) = crate_name("axumstart") {
let meta = Ident::new(&name, Span::call_site());
let sub = Ident::new(submodule, Span::call_site());
return quote!(::#meta::#sub);
}
match crate_name(direct_crate) {
Ok(FoundCrate::Itself) => quote!(crate),
Ok(FoundCrate::Name(name)) => {
let ident = Ident::new(&name, Span::call_site());
quote!(::#ident)
}
Err(_) => {
let ident = Ident::new(direct_crate, Span::call_site());
quote!(::#ident)
}
}
}