What changed, and why it matters
This commit is a routine code reorganization. It moves existing error types into new 'error' submodules and re-exports them in the same way the project does elsewhere. No behavior changes, no bug fixes, and no security implications are visible.
No security action required. Treat as normal maintenance/refactoring.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch relocates TxMerkleNodeDecoderError and OverflowError into newly-created error submodules (bitcoin/src/merkle_tree/mod.rs, primitives/src/merkle_tree.rs, units/src/fee_rate/serde.rs) and re-exports them with #[doc(no_inline)]. The error type definitions, derives, trait implementations, and public visibility are preserved exactly. This is a pure refactoring for API consistency.
Changed components
bitcoin/src/merkle_tree/mod.rsprimitives/src/merkle_tree.rsunits/src/fee_rate/serde.rsInspect captured patch +41 / −22
diff --git a/bitcoin/src/merkle_tree/mod.rs b/bitcoin/src/merkle_tree/mod.rs
index 121e0931..47feb480 100644
--- a/bitcoin/src/merkle_tree/mod.rs
+++ b/bitcoin/src/merkle_tree/mod.rs
@@ -18,4 +18,10 @@
#[doc(inline)]
pub use primitives::merkle_tree::{TxMerkleNodeDecoder, TxMerkleNodeEncoder, TxMerkleNode, WitnessMerkleNode};
#[doc(no_inline)]
-pub use primitives::merkle_tree::TxMerkleNodeDecoderError;
+pub use self::error::TxMerkleNodeDecoderError;
+
+/// Error types for the merkle tree module.
+pub mod error {
+ #[doc(inline)]
+ pub use primitives::merkle_tree::TxMerkleNodeDecoderError;
+}
diff --git a/primitives/src/merkle_tree.rs b/primitives/src/merkle_tree.rs
index fcf0ba99..eca3de5a 100644
--- a/primitives/src/merkle_tree.rs
+++ b/primitives/src/merkle_tree.rs
@@ -16,10 +16,11 @@ use hashes::{sha256d, HashEngine};
#[cfg(not(feature = "alloc"))]
use internals::array_vec::ArrayVec;
+#[doc(no_inline)]
+pub use self::error::TxMerkleNodeDecoderError;
#[doc(inline)]
pub use crate::hash_types::{
- TxMerkleNode, TxMerkleNodeDecoder, TxMerkleNodeDecoderError, TxMerkleNodeEncoder,
- WitnessMerkleNode,
+ TxMerkleNode, TxMerkleNodeDecoder, TxMerkleNodeEncoder, WitnessMerkleNode,
};
use crate::hash_types::{Txid, Wtxid};
use crate::transaction::TxIdentifier;
@@ -194,6 +195,12 @@ impl MerkleNode for WitnessMerkleNode {
}
}
+/// Error types for the merkle tree module.
+pub mod error {
+ #[doc(inline)]
+ pub use crate::hash_types::TxMerkleNodeDecoderError;
+}
+
#[cfg(test)]
mod tests {
use hashes::HashEngine;
diff --git a/units/src/fee_rate/serde.rs b/units/src/fee_rate/serde.rs
index 1ba3e12a..9b184c5d 100644
--- a/units/src/fee_rate/serde.rs
+++ b/units/src/fee_rate/serde.rs
@@ -23,8 +23,8 @@
//! }
//! ```
-use core::convert::Infallible;
-use core::fmt;
+#[doc(no_inline)]
+pub use self::error::OverflowError;
pub mod as_sat_per_kwu_floor {
//! Serialize and deserialize [`FeeRate`] denominated in satoshis per 1000 weight units.
@@ -406,26 +406,32 @@ pub mod as_sat_per_vb_ceil {
}
}
-/// Overflow occurred while deserializing fee rate per virtual byte.
-#[derive(Debug, Clone, PartialEq, Eq)]
-#[non_exhaustive]
-pub struct OverflowError;
+/// Error types for fee rate serde handling.
+pub mod error {
+ use core::convert::Infallible;
+ use core::fmt;
-impl From<Infallible> for OverflowError {
- fn from(never: Infallible) -> Self { match never {} }
-}
+ /// Overflow occurred while deserializing fee rate per virtual byte.
+ #[derive(Debug, Clone, PartialEq, Eq)]
+ #[non_exhaustive]
+ pub struct OverflowError;
-impl fmt::Display for OverflowError {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "overflow occurred while deserializing fee rate per virtual byte")
+ impl From<Infallible> for OverflowError {
+ fn from(never: Infallible) -> Self { match never {} }
}
-}
-#[cfg(feature = "std")]
-impl std::error::Error for OverflowError {
- #[inline]
- fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
- let Self {} = self;
- None
+ impl fmt::Display for OverflowError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "overflow occurred while deserializing fee rate per virtual byte")
+ }
+ }
+
+ #[cfg(feature = "std")]
+ impl std::error::Error for OverflowError {
+ #[inline]
+ fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
+ let Self {} = self;
+ None
+ }
}
}
Why this scored 15/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.