1use borsh::{BorshDeserialize, BorshSerialize};
2use core::fmt;
3use serde::{Deserialize, Serialize};
4
5pub type PoseidonResult<T> = Result<T, PoseidonError>;
6
7#[derive(Debug)]
8pub enum PoseidonError {
9 Io(std::io::ErrorKind),
10 Http(Minreq),
12 BincodeError(bincode::ErrorKind),
14 SerdeJsonDeser(String),
16 MaxSeedLengthExceeded,
19 IllegalOwner,
22 UnspecifiedError,
24 InvalidBase58ForPublicKey,
26 ErrorConvertingToU832,
28 ProgramIdNotFound,
30 PublicKeyNotFoundInMessageAccounts,
32 AccountIndexNotFoundInMessageAccounts,
34 Bs58Decode(bs58::decode::Error),
36 Bs58Encode(bs58::encode::Error),
38 TransactionNotFoundInCluster,
40}
41
42impl std::error::Error for PoseidonError {}
43
44impl fmt::Display for PoseidonError {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 write!(f, "{:?}", self)
47 }
48}
49
50impl From<bs58::encode::Error> for PoseidonError {
51 fn from(error: bs58::encode::Error) -> Self {
52 PoseidonError::Bs58Encode(error)
53 }
54}
55
56impl From<bs58::decode::Error> for PoseidonError {
57 fn from(error: bs58::decode::Error) -> Self {
58 PoseidonError::Bs58Decode(error)
59 }
60}
61
62impl From<bincode::Error> for PoseidonError {
63 fn from(error: bincode::Error) -> Self {
64 PoseidonError::BincodeError(*error)
65 }
66}
67
68impl From<std::io::Error> for PoseidonError {
69 fn from(io_error: std::io::Error) -> Self {
70 PoseidonError::Io(io_error.kind())
71 }
72}
73
74impl From<serde_json::Error> for PoseidonError {
75 fn from(error: serde_json::Error) -> Self {
76 PoseidonError::SerdeJsonDeser(error.to_string())
77 }
78}
79
80impl From<minreq::Error> for PoseidonError {
81 fn from(minreq_error: minreq::Error) -> Self {
82 PoseidonError::Http(match minreq_error {
83 minreq::Error::InvalidUtf8InBody(utf8_error) => Minreq::InvalidUtf8InBody(utf8_error),
84 minreq::Error::RustlsCreateConnection(rustls_error) => {
85 Minreq::RustlsCreateConnection(rustls_error.to_string())
86 }
87 minreq::Error::IoError(io_error) => Minreq::Io(io_error.kind()),
88 minreq::Error::MalformedChunkLength => Minreq::MalformedChunkLength,
89 minreq::Error::MalformedChunkEnd => Minreq::MalformedChunkEnd,
90 minreq::Error::MalformedContentLength => Minreq::MalformedContentLength,
91 minreq::Error::HeadersOverflow => Minreq::HeadersOverflow,
92 minreq::Error::StatusLineOverflow => Minreq::StatusLineOverflow,
93 minreq::Error::AddressNotFound => Minreq::AddressNotFound,
94 minreq::Error::RedirectLocationMissing => Minreq::RedirectLocationMissing,
95 minreq::Error::InfiniteRedirectionLoop => Minreq::InfiniteRedirectionLoop,
96 minreq::Error::TooManyRedirections => Minreq::TooManyRedirections,
97 minreq::Error::InvalidUtf8InResponse => Minreq::InvalidUtf8InResponse,
98 minreq::Error::PunycodeConversionFailed => Minreq::PunycodeConversionFailed,
99 minreq::Error::HttpsFeatureNotEnabled => Minreq::HttpsFeatureNotEnabled,
100 minreq::Error::PunycodeFeatureNotEnabled => Minreq::PunycodeFeatureNotEnabled,
101 minreq::Error::BadProxy => Minreq::BadProxy,
102 minreq::Error::BadProxyCreds => Minreq::BadProxyCreds,
103 minreq::Error::ProxyConnect => Minreq::ProxyConnect,
104 minreq::Error::InvalidProxyCreds => Minreq::InvalidProxyCreds,
105 minreq::Error::Other(other_error) => Minreq::Other(other_error),
106 })
107 }
108}
109
110#[derive(Debug, Eq, PartialEq, Clone)]
113pub enum Minreq {
114 InvalidUtf8InBody(core::str::Utf8Error),
117 RustlsCreateConnection(String),
119 Io(std::io::ErrorKind),
121 MalformedChunkLength,
124 MalformedChunkEnd,
127 MalformedContentLength,
130 HeadersOverflow,
132 StatusLineOverflow,
134 AddressNotFound,
137 RedirectLocationMissing,
140 InfiniteRedirectionLoop,
142 TooManyRedirections,
144 InvalidUtf8InResponse,
147 PunycodeConversionFailed,
151 HttpsFeatureNotEnabled,
155 PunycodeFeatureNotEnabled,
159 BadProxy,
162 BadProxyCreds,
164 ProxyConnect,
166 InvalidProxyCreds,
168
169 Other(&'static str),
175}
176
177#[derive(
178 Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, PartialOrd, Clone,
179)]
180pub struct RpcResponseJsonError {
181 jsonrpc: String,
182 error: JsonRpcError,
183 id: u8,
184}
185
186#[derive(
187 Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, PartialOrd, Clone,
188)]
189pub struct JsonRpcError {
190 code: i16,
191 message: String,
192}