use reqwest::StatusCode;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("invalid configuration: {0}")]
Config(String),
#[error("request failed: {0}")]
Request(#[from] reqwest::Error),
#[error("Mailisk API returned {status}: {body}")]
Api {
status: StatusCode,
body: String,
},
#[error("failed to decode response: {0}")]
Decode(#[from] serde_json::Error),
}
impl Error {
pub fn status(&self) -> Option<StatusCode> {
match self {
Error::Api { status, .. } => Some(*status),
Error::Request(error) => error.status(),
_ => None,
}
}
}
pub type Result<T, E = Error> = std::result::Result<T, E>;