use thiserror::Error;
#[derive(Debug, Error)]
pub enum OriginError {
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("API error ({status}): {message}")]
Api {
status: u16,
code: Option<String>,
message: String,
command: Option<String>,
},
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("{0}")]
Config(String),
}
impl OriginError {
pub fn api(status: u16, message: impl Into<String>) -> Self {
Self::Api {
status,
code: None,
message: message.into(),
command: None,
}
}
pub fn api_full(
status: u16,
code: Option<String>,
message: impl Into<String>,
command: Option<String>,
) -> Self {
Self::Api {
status,
code,
message: message.into(),
command,
}
}
pub fn config(message: impl Into<String>) -> Self {
Self::Config(message.into())
}
}
pub type Result<T> = std::result::Result<T, OriginError>;