borsh_derive/internals/
cratename.rs1use 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}