bitcoincore_rest/
error.rs

1/// Error type for RestApi responses.
2#[derive(Debug)]
3pub enum Error {
4    BitcoinEncodeError(bitcoin::consensus::encode::Error),
5    NotOkError(http::StatusCode),
6    #[cfg(feature = "use-reqwest")]
7    #[cfg_attr(docsrs, doc(cfg(feature = "use-reqwest")))]
8    ReqwestError(reqwest::Error),
9    #[cfg(not(feature = "use-reqwest"))]
10    #[cfg_attr(docsrs, doc(cfg(not(feature = "use-reqwest"))))]
11    CustomError(Box<dyn std::error::Error>),
12}
13
14impl std::fmt::Display for Error {
15    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
16        match *self {
17            Error::BitcoinEncodeError(ref e) => write!(f, "Bitcoin encode error, {e}"),
18            Error::NotOkError(ref e) => write!(f, "Incorrect status code {e}"),
19            #[cfg(feature = "use-reqwest")]
20            #[cfg_attr(docsrs, doc(cfg(feature = "use-reqwest")))]
21            Error::ReqwestError(ref e) => write!(f, "Reqwest error, {e}"),
22            #[cfg(not(feature = "use-reqwest"))]
23            #[cfg_attr(docsrs, doc(cfg(not(feature = "use-reqwest"))))]
24            Error::CustomError(ref e) => write!(f, "Custom error, {}", e),
25        }
26    }
27}
28
29impl std::error::Error for Error {
30    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
31        use self::Error::*;
32
33        match self {
34            BitcoinEncodeError(e) => Some(e),
35            NotOkError(_) => None,
36            #[cfg(feature = "use-reqwest")]
37            #[cfg_attr(docsrs, doc(cfg(feature = "use-reqwest")))]
38            ReqwestError(e) => Some(e),
39            #[cfg(not(feature = "use-reqwest"))]
40            #[cfg_attr(docsrs, doc(cfg(not(feature = "use-reqwest"))))]
41            CustomError(e) => Some(e.as_ref()),
42        }
43    }
44}
45
46#[cfg(feature = "use-reqwest")]
47#[cfg_attr(docsrs, doc(cfg(feature = "use-reqwest")))]
48impl From<reqwest::Error> for Error {
49    fn from(err: reqwest::Error) -> Self {
50        Self::ReqwestError(err)
51    }
52}
53
54impl From<bitcoin::consensus::encode::Error> for Error {
55    fn from(err: bitcoin::consensus::encode::Error) -> Self {
56        Self::BitcoinEncodeError(err)
57    }
58}