borsh_derive/internals/
cratename.rs

1use proc_macro2::Span;
2use proc_macro_crate::{crate_name, FoundCrate};
3use syn::{Attribute, Error, Ident, Path};
4
5use super::attributes::item;
6
7pub(crate) const BORSH: &str = "borsh";
8
9pub(crate) fn get(attrs: &[Attribute]) -> Result<Path, Error> {
10    let path = item::get_crate(attrs)?;
11    match path {
12        Some(path) => Ok(path),
13        None => {
14            let ident = get_from_cargo();
15            Ok(ident.into())
16        }
17    }
18}
19
20pub(crate) fn get_from_cargo() -> Ident {
21    let name = &crate_name(BORSH).unwrap();
22    let name = match name {
23        FoundCrate::Itself => BORSH,
24        FoundCrate::Name(name) => name.as_str(),
25    };
26    Ident::new(name, Span::call_site())
27}