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 {}