diff --git a/CHANGELOG.md b/CHANGELOG.md index 9aa20522..c7756d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,13 @@ ## hdf5 unreleased ## hdf5-sys unreleased ## hdf5-src unreleased + ## hdf5-derive unreleased +- Fixed crate name assumption + ## hdf5-types unreleased + ## hdf5-src v0.9.2 Release date: Aug 14, 2024. diff --git a/hdf5-derive/Cargo.toml b/hdf5-derive/Cargo.toml index 0f9f132b..0b7c7189 100644 --- a/hdf5-derive/Cargo.toml +++ b/hdf5-derive/Cargo.toml @@ -16,6 +16,7 @@ edition.workspace = true proc-macro = true [dependencies] +proc-macro-crate = "3.2.0" proc-macro-error = { version = "1.0", default-features = false } proc-macro2 = "1.0" quote = "1.0" diff --git a/hdf5-derive/src/lib.rs b/hdf5-derive/src/lib.rs index 8e9f02a4..977507ad 100644 --- a/hdf5-derive/src/lib.rs +++ b/hdf5-derive/src/lib.rs @@ -20,10 +20,19 @@ pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); let body = impl_trait(&name, &input.data, &input.attrs, &ty_generics); let dummy = Ident::new(&format!("_IMPL_H5TYPE_FOR_{}", name), Span::call_site()); + + // Determine name of parent crate, even if renamed using "package" + let crate_name = match proc_macro_crate::crate_name("hdf5-metno").unwrap() { + proc_macro_crate::FoundCrate::Itself => quote!(::hdf5_metno), + proc_macro_crate::FoundCrate::Name(name) => { + let ident = Ident::new(&name, Span::call_site()); + quote!( ::#ident ) + } + }; let expanded = quote! { #[allow(dead_code, unused_variables, unused_attributes)] const #dummy: () = { - use ::hdf5_metno as _h5; + use #crate_name as _h5; #[automatically_derived] unsafe impl #impl_generics _h5::types::H5Type for #name #ty_generics #where_clause {