ori-macro 0.1.0-alpha.1

Macros for Ori
Documentation
use proc_macro2::{Ident, Span, TokenStream};
use proc_macro_crate::FoundCrate;
use quote::quote;

fn found_crate(krate: FoundCrate) -> TokenStream {
    match krate {
        FoundCrate::Itself => quote!(crate),
        FoundCrate::Name(name) => {
            let ident = Ident::new(&name, Span::call_site());
            quote!(#ident)
        }
    }
}

pub fn find_crate(krate: &str) -> TokenStream {
    let ident = Ident::new(&krate, Span::call_site());
    let krate = format!("ori-{}", krate);

    match proc_macro_crate::crate_name(&krate) {
        Ok(krate) => found_crate(krate),
        Err(_) => match proc_macro_crate::crate_name("ori") {
            Ok(krate) => {
                let krate = found_crate(krate);
                quote!(#krate::#ident)
            }
            Err(_) => quote!(ori::#ident),
        },
    }
}