use std::fmt;
use orpc::ORPCError;
#[derive(Debug)]
pub enum ClientError {
Transport(reqwest::Error),
Serialize(serde_json::Error),
Deserialize(serde_json::Error),
Rpc(ORPCError),
Sse(String),
}
impl fmt::Display for ClientError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ClientError::Transport(e) => write!(f, "transport error: {e}"),
ClientError::Serialize(e) => write!(f, "serialize error: {e}"),
ClientError::Deserialize(e) => write!(f, "deserialize error: {e}"),
ClientError::Rpc(e) => write!(f, "rpc error: {e}"),
ClientError::Sse(msg) => write!(f, "sse error: {msg}"),
}
}
}
impl std::error::Error for ClientError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
ClientError::Transport(e) => Some(e),
ClientError::Serialize(e) => Some(e),
ClientError::Deserialize(e) => Some(e),
ClientError::Rpc(e) => Some(e),
_ => None,
}
}
}
impl From<reqwest::Error> for ClientError {
fn from(err: reqwest::Error) -> Self {
ClientError::Transport(err)
}
}
impl From<ORPCError> for ClientError {
fn from(err: ORPCError) -> Self {
ClientError::Rpc(err)
}
}