diff --git a/bitcoin/src/address/error.rs b/bitcoin/src/address/error.rs index 78e50633..a5be763e 100644 --- a/bitcoin/src/address/error.rs +++ b/bitcoin/src/address/error.rs @@ -9,47 +9,25 @@ use crate::blockdata::script::{witness_program, witness_version}; use crate::prelude::*; use crate::Network; -/// Address error. +/// Address's network differs from required one. #[derive(Debug, Clone, PartialEq, Eq)] -#[non_exhaustive] -pub enum Error { - /// Address's network differs from required one. - NetworkValidation { - /// Network that was required. - required: Network, - /// The address itself - address: Address, - }, - /// Unknown hrp for current bitcoin networks (in bech32 address). - UnknownHrp(UnknownHrpError), +pub struct NetworkValidationError { + /// Network that was required. + pub(crate) required: Network, + /// The address itself. + pub(crate) address: Address, } -impl fmt::Display for Error { +impl fmt::Display for NetworkValidationError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use Error::*; - - match *self { - NetworkValidation { required, ref address } => { - write!(f, "address ")?; - fmt::Display::fmt(&address.0, f)?; - write!(f, " is not valid on {}", required) - } - Error::UnknownHrp(ref e) => write_err!(f, "unknown hrp"; e), - } + write!(f, "address ")?; + fmt::Display::fmt(&self.address.0, f)?; + write!(f, " is not valid on {}", self.required) } } #[cfg(feature = "std")] -impl std::error::Error for Error { - fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { - use Error::*; - - match *self { - UnknownHrp(ref e) => Some(e), - NetworkValidation { .. } => None, - } - } -} +impl std::error::Error for NetworkValidationError {} /// Error while generating address from script. #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/bitcoin/src/address/mod.rs b/bitcoin/src/address/mod.rs index d91a60df..a3cae064 100644 --- a/bitcoin/src/address/mod.rs +++ b/bitcoin/src/address/mod.rs @@ -54,7 +54,7 @@ use self::error::P2shError; #[rustfmt::skip] // Keep public re-exports separate. #[doc(inline)] pub use self::{ - error::{Error, ParseError, UnknownAddressTypeError, UnknownHrpError, FromScriptError}, + error::{NetworkValidationError, ParseError, UnknownAddressTypeError, UnknownHrpError, FromScriptError, }, }; /// The different types of addresses. @@ -666,11 +666,11 @@ impl Address { /// For details about this mechanism, see section [*Parsing addresses*](Address#parsing-addresses) /// on [`Address`]. #[inline] - pub fn require_network(self, required: Network) -> Result { + pub fn require_network(self, required: Network) -> Result { if self.is_valid_for_network(required) { Ok(self.assume_checked()) } else { - Err(Error::NetworkValidation { required, address: self }) + Err(NetworkValidationError { required, address: self }) } }