diff --git a/Cargo.toml b/Cargo.toml index 0d9540a2bd..1382c3abff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,11 @@ js = [ "std", ] +inventory-0-3-1 = [ + "dep:inventory-0-3-1", + "safer_ffi-proc_macros/inventory-0-3-1", +] + [dev-dependencies] macro_rules_attribute = "0.1.0" safer-ffi.path = "." @@ -95,6 +100,12 @@ unwind_safe.version = "0.1.0" with_builtin_macros.version = "0.0.3" macro_rules_attribute = "0.1.0" + +[dependencies.inventory-0-3-1] +package = "inventory" +version = "0.3.1" +optional = true + [dependencies.napi] package = "napi-dispatcher" path = "napi-dispatcher" diff --git a/napi-dispatcher/nodejs-derive/src/proc_macros/mod.rs b/napi-dispatcher/nodejs-derive/src/proc_macros/mod.rs index 2616dfa2ed..993f467e32 100644 --- a/napi-dispatcher/nodejs-derive/src/proc_macros/mod.rs +++ b/napi-dispatcher/nodejs-derive/src/proc_macros/mod.rs @@ -92,6 +92,9 @@ fn js_export ( ) }; let stmts = &fun.block.stmts; + let krate_annotation = cfg!(not(feature = "inventory-0-3-1")).then(|| { + quote!( #![crate = ::safer_ffi::js::registering] ) + }); let ret = quote!( const _: () = { #napi_import @@ -106,7 +109,7 @@ fn js_export ( } ::safer_ffi::js::registering::submit! { - #![crate = ::safer_ffi::js::registering] + #krate_annotation ::safer_ffi::js::registering::NapiRegistryEntry::NamedMethod { name: ::core::stringify!(#js_name), diff --git a/src/_lib.rs b/src/_lib.rs index 646e729393..ef8e997ffc 100644 --- a/src/_lib.rs +++ b/src/_lib.rs @@ -223,8 +223,16 @@ pub use ::safer_ffi_proc_macros::derive_ReprC; pub mod layout; __cfg_headers__! { - #[doc(hidden)] pub - use ::inventory; + cfg_match! { + feature = "inventory-0-3-1" => { + #[doc(hidden)] pub + use ::inventory_0_3_1 as inventory; + }, + _ => { + #[doc(hidden)] pub + use ::inventory; + }, + } #[cfg_attr(feature = "nightly", doc(cfg(feature = "headers")), @@ -246,7 +254,7 @@ __cfg_headers__! { , } - ::inventory::collect!(FfiExport); + self::inventory::collect!(FfiExport); } cfg_alloc! { @@ -478,7 +486,6 @@ mod __ { #[cfg(feature = "headers")] pub use { - ::inventory, crate::{ headers::{ Definer, @@ -491,6 +498,7 @@ mod __ { StructField, }, }, + inventory, FfiExport, }, }; diff --git a/src/js/registering.rs b/src/js/registering.rs index 033f44d32d..b478c4a85b 100644 --- a/src/js/registering.rs +++ b/src/js/registering.rs @@ -26,9 +26,9 @@ enum NapiRegistryEntry { }, } -::inventory::collect!(NapiRegistryEntry); +self::inventory::collect!(NapiRegistryEntry); -pub use ::inventory::{self, submit}; +pub use crate::inventory::{self, submit}; #[cold] pub @@ -41,7 +41,7 @@ fn napi_register_module_v1 ( // let env = ::napi::Env::from_raw(raw_env); let mut exports: ::napi::JsObject = ::napi::NapiValue::from_raw_unchecked(raw_env, raw_exports); match (|| ::napi::Result::<_>::Ok({ - for entry in ::inventory::iter:: { + for entry in crate::inventory::iter:: { match entry { | &NapiRegistryEntry::NamedMethod { name, method } => { let _ = exports.create_named_method(name, method); diff --git a/src/proc_macro/Cargo.toml b/src/proc_macro/Cargo.toml index 22463b3b7f..49119c408a 100644 --- a/src/proc_macro/Cargo.toml +++ b/src/proc_macro/Cargo.toml @@ -37,3 +37,5 @@ js = [ verbose-expansions = [ # "prettyplease", ] + +inventory-0-3-1 = [] diff --git a/src/proc_macro/ffi_export/const_.rs b/src/proc_macro/ffi_export/const_.rs index 8490642eb5..63c8246d9f 100644 --- a/src/proc_macro/ffi_export/const_.rs +++ b/src/proc_macro/ffi_export/const_.rs @@ -24,12 +24,16 @@ fn handle ( let Ty @ _ = &input.ty; let ref each_doc = utils::extract_docs(&input.attrs)?; + let inventory_krate = cfg!(not(feature = "inventory-0-3-1")).then(|| { + quote!( #![crate = #ඞ] ) + }); Ok(quote!( #input #[cfg(not(target_arch = "wasm32"))] #ඞ::inventory::submit! { - #![crate = #ඞ] + #inventory_krate + #ඞ::FfiExport { name: #VAR_str, gen_def: | diff --git a/src/proc_macro/ffi_export/fn_/mod.rs b/src/proc_macro/ffi_export/fn_/mod.rs index 6065da2f02..85a31387b0 100644 --- a/src/proc_macro/ffi_export/fn_/mod.rs +++ b/src/proc_macro/ffi_export/fn_/mod.rs @@ -358,10 +358,14 @@ fn handle ( let ref EachArgTy @ _ = arg_tys(&fun).vec(); let each_doc = utils::extract_docs(&fun.attrs)?; let (generics, _, where_clause) = fun.sig.generics.split_for_impl(); + let inventory_krate = cfg!(not(feature = "inventory-0-3-1")).then(|| { + quote!( #![crate = #ඞ] ) + }); ret.extend(quote!( #[cfg(not(target_arch = "wasm32"))] #ඞ::inventory::submit! { - #![crate = #ඞ] + #inventory_krate + #ඞ::FfiExport { name: #export_name_str, gen_def: { diff --git a/src/proc_macro/ffi_export/type_.rs b/src/proc_macro/ffi_export/type_.rs index 1fb0ab07b0..1761528ac1 100644 --- a/src/proc_macro/ffi_export/type_.rs +++ b/src/proc_macro/ffi_export/type_.rs @@ -19,13 +19,16 @@ fn handle ( } } let ref Ty_str @ _ = Ty.to_string(); + let inventory_krate = cfg!(not(feature = "inventory-0-3-1")).then(|| { + quote!( #![crate = ::safer_ffi] ) + }); Ok(quote!( #input #[cfg(not(target_arch = "wasm32"))] ::safer_ffi::__cfg_headers__! { ::safer_ffi::inventory::submit! { - #![crate = ::safer_ffi] + #inventory_krate ::safer_ffi::FfiExport { name: #Ty_str,