brk_error/
lib.rs

1#![doc = include_str!("../README.md")]
2
3use std::{
4    fmt::{self, Debug, Display},
5    io, result, time,
6};
7
8pub type Result<T, E = Error> = result::Result<T, E>;
9
10#[derive(Debug)]
11pub enum Error {
12    IO(io::Error),
13    BitcoinRPC(bitcoincore_rpc::Error),
14    Jiff(jiff::Error),
15    Fjall(fjall::Error),
16    VecDB(vecdb::Error),
17    SeqDB(vecdb::SeqDBError),
18    Minreq(minreq::Error),
19    SystemTimeError(time::SystemTimeError),
20    SerdeJson(serde_json::Error),
21    ZeroCopyError,
22    Vecs(vecdb::Error),
23
24    WrongLength,
25    WrongAddressType,
26    UnindexableDate,
27    QuickCacheError,
28    Str(&'static str),
29    String(String),
30}
31
32impl From<time::SystemTimeError> for Error {
33    fn from(value: time::SystemTimeError) -> Self {
34        Self::SystemTimeError(value)
35    }
36}
37
38impl From<serde_json::Error> for Error {
39    fn from(error: serde_json::Error) -> Self {
40        Self::SerdeJson(error)
41    }
42}
43
44impl From<io::Error> for Error {
45    fn from(value: io::Error) -> Self {
46        Self::IO(value)
47    }
48}
49
50impl From<vecdb::Error> for Error {
51    fn from(value: vecdb::Error) -> Self {
52        Self::VecDB(value)
53    }
54}
55
56impl From<vecdb::SeqDBError> for Error {
57    fn from(value: vecdb::SeqDBError) -> Self {
58        Self::SeqDB(value)
59    }
60}
61
62impl From<bitcoincore_rpc::Error> for Error {
63    fn from(value: bitcoincore_rpc::Error) -> Self {
64        Self::BitcoinRPC(value)
65    }
66}
67
68impl From<minreq::Error> for Error {
69    fn from(value: minreq::Error) -> Self {
70        Self::Minreq(value)
71    }
72}
73
74impl From<jiff::Error> for Error {
75    fn from(value: jiff::Error) -> Self {
76        Self::Jiff(value)
77    }
78}
79
80impl From<fjall::Error> for Error {
81    fn from(value: fjall::Error) -> Self {
82        Self::Fjall(value)
83    }
84}
85
86impl<A, B, C> From<zerocopy::error::ConvertError<A, B, C>> for Error {
87    fn from(_: zerocopy::error::ConvertError<A, B, C>) -> Self {
88        Self::ZeroCopyError
89    }
90}
91
92impl<A, B> From<zerocopy::error::SizeError<A, B>> for Error {
93    fn from(_: zerocopy::error::SizeError<A, B>) -> Self {
94        Self::ZeroCopyError
95    }
96}
97
98impl fmt::Display for Error {
99    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
100        match self {
101            Error::IO(error) => Display::fmt(&error, f),
102            Error::Minreq(error) => Display::fmt(&error, f),
103            Error::SerdeJson(error) => Display::fmt(&error, f),
104            Error::VecDB(error) => Display::fmt(&error, f),
105            Error::SeqDB(error) => Display::fmt(&error, f),
106            Error::Vecs(error) => Display::fmt(&error, f),
107            Error::BitcoinRPC(error) => Display::fmt(&error, f),
108            Error::SystemTimeError(error) => Display::fmt(&error, f),
109            Error::Jiff(error) => Display::fmt(&error, f),
110            Error::Fjall(error) => Display::fmt(&error, f),
111            Error::ZeroCopyError => write!(f, "ZeroCopy error"),
112
113            Error::WrongLength => write!(f, "Wrong length"),
114            Error::QuickCacheError => write!(f, "Quick cache error"),
115            Error::WrongAddressType => write!(f, "Wrong address type"),
116            Error::UnindexableDate => write!(
117                f,
118                "Date cannot be indexed, must be 2009-01-03, 2009-01-09 or greater"
119            ),
120
121            Error::Str(s) => write!(f, "{s}"),
122            Error::String(s) => write!(f, "{s}"),
123        }
124    }
125}
126
127impl std::error::Error for Error {}