use thiserror::Error;
pub type ClientResult<T> = Result<T, ClientError>;
#[derive(Error, Debug)]
pub enum ClientError {
#[error("No running AimDB instances found")]
NoInstancesFound,
#[error("Connection failed to {socket}: {reason}")]
ConnectionFailed { socket: String, reason: String },
#[error("Server error (code {code}): {message}")]
ServerError {
code: String,
message: String,
details: Option<serde_json::Value>,
},
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("{0}")]
Other(#[from] anyhow::Error),
}
impl ClientError {
pub fn connection_failed(socket: impl Into<String>, reason: impl Into<String>) -> Self {
Self::ConnectionFailed {
socket: socket.into(),
reason: reason.into(),
}
}
pub fn server_error(
code: impl Into<String>,
message: impl Into<String>,
details: Option<serde_json::Value>,
) -> Self {
Self::ServerError {
code: code.into(),
message: message.into(),
details,
}
}
}