bitcoin/dogecoin/address/
error.rs1use core::fmt;
6
7use internals::write_err;
8
9use crate::dogecoin::address::{Address, NetworkUnchecked};
10use crate::dogecoin::Network;
11
12pub use crate::address::error::{
13 FromScriptError, InvalidBase58PayloadLengthError, InvalidLegacyPrefixError,
14 LegacyAddressTooLongError, P2shError,
15};
16
17#[derive(Debug, Clone, PartialEq, Eq)]
19#[non_exhaustive]
20pub enum ParseError {
21 Base58(base58::Error),
23 LegacyAddressTooLong(LegacyAddressTooLongError),
25 InvalidBase58PayloadLength(InvalidBase58PayloadLengthError),
27 InvalidLegacyPrefix(InvalidLegacyPrefixError),
29 NetworkValidation(NetworkValidationError),
31}
32
33internals::impl_from_infallible!(ParseError);
34
35impl fmt::Display for ParseError {
36 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
37 use ParseError::*;
38
39 match *self {
40 Base58(ref e) => write_err!(f, "base58 error"; e),
41 LegacyAddressTooLong(ref e) => write_err!(f, "legacy address base58 string"; e),
42 InvalidBase58PayloadLength(ref e) => write_err!(f, "legacy address base58 data"; e),
43 InvalidLegacyPrefix(ref e) => write_err!(f, "legacy address base58 prefix"; e),
44 NetworkValidation(ref e) => write_err!(f, "validation error"; e),
45 }
46 }
47}
48
49#[cfg(feature = "std")]
50impl std::error::Error for ParseError {
51 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
52 use ParseError::*;
53
54 match *self {
55 Base58(ref e) => Some(e),
56 LegacyAddressTooLong(ref e) => Some(e),
57 InvalidBase58PayloadLength(ref e) => Some(e),
58 InvalidLegacyPrefix(ref e) => Some(e),
59 NetworkValidation(ref e) => Some(e),
60 }
61 }
62}
63
64impl From<base58::Error> for ParseError {
65 fn from(e: base58::Error) -> Self {
66 Self::Base58(e)
67 }
68}
69
70impl From<LegacyAddressTooLongError> for ParseError {
71 fn from(e: LegacyAddressTooLongError) -> Self {
72 Self::LegacyAddressTooLong(e)
73 }
74}
75
76impl From<InvalidBase58PayloadLengthError> for ParseError {
77 fn from(e: InvalidBase58PayloadLengthError) -> Self {
78 Self::InvalidBase58PayloadLength(e)
79 }
80}
81
82impl From<InvalidLegacyPrefixError> for ParseError {
83 fn from(e: InvalidLegacyPrefixError) -> Self {
84 Self::InvalidLegacyPrefix(e)
85 }
86}
87
88impl From<NetworkValidationError> for ParseError {
89 fn from(e: NetworkValidationError) -> Self {
90 Self::NetworkValidation(e)
91 }
92}
93
94#[derive(Debug, Clone, PartialEq, Eq)]
96pub struct NetworkValidationError {
97 pub(crate) required: Network,
99 pub(crate) address: Address<NetworkUnchecked>,
101}
102
103impl fmt::Display for NetworkValidationError {
104 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
105 write!(f, "address ")?;
106 fmt::Display::fmt(&self.address.0, f)?;
107 write!(f, " is not valid on {}", self.required)
108 }
109}
110
111#[cfg(feature = "std")]
112impl std::error::Error for NetworkValidationError {}