Re-export serde and arbitrary when they appear in public API
What changed, and why it matters
This change makes two helper libraries (serde and arbitrary) publicly visible from several rust-bitcoin crates. It is a dependency-management convenience for downstream developers and does not fix or introduce any security vulnerability.
No security action required. Treat as a normal API/dependency-management change during review.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit converts private extern crate declarations for serde and arbitrary into public re-exports (pub extern crate) in bitcoin, network, p2p, primitives, and units. It also updates public-API snapshot files. This is a semver/API-ergonomics change: downstream users can now reference serde::Serialize / arbitrary::Arbitrary through the re-export rather than adding a direct dependency. There is no functional code change, no unsafe code, no cryptographic change, and no bug fix.
Changed components
bitcoin/src/lib.rsnetwork/src/lib.rsp2p/src/lib.rsprimitives/src/lib.rsunits/src/lib.rsapi/primitives/all-features.txtapi/units/all-features.txtInspect captured patch +25 / −3
diff --git a/api/primitives/all-features.txt b/api/primitives/all-features.txt
index 558784c7..e7dda6df 100644
--- a/api/primitives/all-features.txt
+++ b/api/primitives/all-features.txt
@@ -1363,8 +1363,10 @@ pub enum bitcoin_primitives::script::ScriptPubKeyTag
pub enum bitcoin_primitives::script::ScriptSigTag
pub enum bitcoin_primitives::script::TapScriptTag
pub enum bitcoin_primitives::script::WitnessScriptTag
+pub extern crate bitcoin_primitives::arbitrary
pub extern crate bitcoin_primitives::encoding
pub extern crate bitcoin_primitives::hex
+pub extern crate bitcoin_primitives::serde
pub fn &'a bitcoin_primitives::script::Script<T>::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
pub fn &'a bitcoin_primitives::witness::Witness::into_iter(self) -> Self::IntoIter
pub fn &'de bitcoin_primitives::script::Script<T>::deserialize<D>(deserializer: D) -> core::result::Result<Self, <D as serde::de::Deserializer>::Error> where D: serde::de::Deserializer<'de>
diff --git a/api/units/all-features.txt b/api/units/all-features.txt
index b0d08d30..bf977998 100644
--- a/api/units/all-features.txt
+++ b/api/units/all-features.txt
@@ -1810,7 +1810,9 @@ pub enum bitcoin_units::relative::error::IsSatisfiedByError
pub enum bitcoin_units::relative::error::IsSatisfiedByHeightError
pub enum bitcoin_units::relative::error::IsSatisfiedByTimeError
pub enum bitcoin_units::result::NumOpResult<T>
+pub extern crate bitcoin_units::arbitrary
pub extern crate bitcoin_units::encoding
+pub extern crate bitcoin_units::serde
pub fn &bitcoin_units::Amount::add(self, rhs: &bitcoin_units::Amount) -> Self::Output
pub fn &bitcoin_units::Amount::add(self, rhs: &bitcoin_units::result::NumOpResult<bitcoin_units::Amount>) -> Self::Output
pub fn &bitcoin_units::Amount::add(self, rhs: bitcoin_units::Amount) -> Self::Output
diff --git a/bitcoin/src/lib.rs b/bitcoin/src/lib.rs
index 491142ec..4d3b4779 100644
--- a/bitcoin/src/lib.rs
+++ b/bitcoin/src/lib.rs
@@ -59,6 +59,9 @@ extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
+#[cfg(feature = "arbitrary")]
+pub extern crate arbitrary;
+
/// Encodes and decodes base64 as bytes or utf8.
#[cfg(feature = "base64")]
pub extern crate base64;
@@ -92,7 +95,7 @@ pub extern crate secp256k1;
#[cfg(feature = "serde")]
#[macro_use]
-extern crate serde;
+pub extern crate serde;
mod internal_macros;
diff --git a/network/src/lib.rs b/network/src/lib.rs
index 19a06314..f3326ba8 100644
--- a/network/src/lib.rs
+++ b/network/src/lib.rs
@@ -16,7 +16,7 @@
extern crate std;
#[cfg(feature = "serde")]
-extern crate serde;
+pub extern crate serde;
use core::fmt;
use core::str::FromStr;
diff --git a/p2p/src/lib.rs b/p2p/src/lib.rs
index 12426883..aff423dd 100644
--- a/p2p/src/lib.rs
+++ b/p2p/src/lib.rs
@@ -28,6 +28,12 @@ extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
+#[cfg(feature = "serde")]
+pub extern crate serde;
+
+#[cfg(feature = "arbitrary")]
+pub extern crate arbitrary;
+
pub extern crate hex_stable as hex;
use alloc::borrow::ToOwned;
diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs
index faa9e98c..84aecec7 100644
--- a/primitives/src/lib.rs
+++ b/primitives/src/lib.rs
@@ -27,7 +27,10 @@ extern crate std;
#[cfg(feature = "serde")]
#[macro_use]
-extern crate serde;
+pub extern crate serde;
+
+#[cfg(feature = "arbitrary")]
+pub extern crate arbitrary;
/// Re-export of the `encoding` crate.
pub extern crate encoding;
diff --git a/units/src/lib.rs b/units/src/lib.rs
index 4ee6d6e2..352d5cd1 100644
--- a/units/src/lib.rs
+++ b/units/src/lib.rs
@@ -38,6 +38,12 @@ extern crate std;
#[cfg(feature = "encoding")]
pub extern crate encoding;
+#[cfg(feature = "serde")]
+pub extern crate serde;
+
+#[cfg(feature = "arbitrary")]
+pub extern crate arbitrary;
+
#[doc(hidden)]
pub mod _export {
/// A re-export of `core::*`.
Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.