1use thiserror::Error;
2use tokio_tungstenite::tungstenite::{self};
3
4use crate::{NotisResponse, RPCError, RPCRequest, RPCResponse};
5
6pub type Result<T> = std::result::Result<T, PaleError>;
7
8#[derive(Debug, Error)]
9pub enum PaleError {
10 #[error("{0:?}")]
11 RPC(RPCError),
12 #[error("Neither result or error was populated")]
13 NoReturnedRPCData,
14 #[error("Request timeout")]
15 RequestTimeout,
16 #[error("The request either timeout or got None")]
17 RequestTimeoutOrError,
18 #[error("The underlying connection was either dropped or took too long to reconnect")]
19 ClientDisconnected,
20 #[error("The client is already connected")]
21 ClientAlreadyConnected,
22 #[error("Client timeout on connection: {0:?}")]
23 ClientTimeout(#[from] tokio::time::error::Elapsed),
24 #[error(transparent)]
25 Tungstenite(#[from] tungstenite::Error),
26 #[error(transparent)]
27 SerdeJson(#[from] serde_json::Error),
28 #[error(transparent)]
29 InvalidUri(#[from] tokio_tungstenite::tungstenite::http::uri::InvalidUri),
30 #[error(transparent)]
31 RequestSendError(#[from] tokio::sync::broadcast::error::SendError<RPCRequest>),
32 #[error(transparent)]
33 CloseSendError(#[from] tokio::sync::mpsc::error::SendError<()>),
34 #[error(transparent)]
35 ResponseSendError(#[from] tokio::sync::broadcast::error::SendError<RPCResponse>),
36 #[error(transparent)]
37 ValueSendError(#[from] tokio::sync::broadcast::error::SendError<NotisResponse>),
38}