use thiserror::Error;
#[derive(Error, Debug, Clone)]
pub enum Error {
#[error("Internal error: {0}")]
InternalError(String),
#[error("Transport error: {0}")]
TransportError(String),
#[error("Protocol error: {0}")]
ProtocolError(String),
#[error("Parse error: {0}")]
ParseError(String),
#[error("Authentication error: {0}")]
AuthError(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Server error {0}: {1}")]
ServerError(i32, String, Option<serde_json::Value>),
#[error("Timeout: {0}")]
Timeout(String),
#[error("Unsupported feature: {0}")]
UnsupportedFeature(String),
#[error("Not initialized")]
NotInitialized,
#[error("Connection closed: {0}")]
ConnectionClosed(String),
#[error("JSON error: {0}")]
JsonError(String),
#[error("IO error: {0}")]
IoError(String),
#[error("Invalid URL: {0}")]
UrlError(String),
}
pub type Result<T> = std::result::Result<T, Error>;
impl From<serde_json::Error> for Error {
fn from(err: serde_json::Error) -> Self {
Error::JsonError(err.to_string())
}
}
impl From<std::io::Error> for Error {
fn from(err: std::io::Error) -> Self {
Error::IoError(err.to_string())
}
}
impl From<url::ParseError> for Error {
fn from(err: url::ParseError) -> Self {
Error::UrlError(err.to_string())
}
}