use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("Connection error: {0}")]
Connection(String),
#[error("Server error [{code}]: {message}")]
Server {
code: i32,
message: String,
data: Option<serde_json::Value>,
},
#[error("Validation error: {message}")]
Validation {
message: String,
field: Option<String>,
},
#[error("Timeout: {0}")]
Timeout(String),
#[error("Tool not found: {0}")]
ToolNotFound(String),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
}
impl Error {
pub fn validation(message: impl Into<String>) -> Self {
Self::Validation {
message: message.into(),
field: None,
}
}
pub fn validation_field(message: impl Into<String>, field: impl Into<String>) -> Self {
Self::Validation {
message: message.into(),
field: Some(field.into()),
}
}
pub fn connection(message: impl Into<String>) -> Self {
Self::Connection(message.into())
}
pub fn server(code: i32, message: impl Into<String>) -> Self {
Self::Server {
code,
message: message.into(),
data: None,
}
}
}