use thiserror::Error;
use crate::exit;
#[derive(Debug, Error)]
pub enum AkmError {
#[error("{0}")]
BadInput(String),
#[error("{0}")]
NotFound(String),
#[error("{0}")]
Internal(#[from] anyhow::Error),
}
impl AkmError {
pub fn exit_code(&self) -> u8 {
match self {
AkmError::BadInput(_) => exit::BAD_INPUT,
AkmError::NotFound(_) => exit::NOT_FOUND,
AkmError::Internal(_) => exit::TRANSIENT,
}
}
pub fn code_str(&self) -> &'static str {
match self {
AkmError::BadInput(_) => "bad_input",
AkmError::NotFound(_) => "not_found",
AkmError::Internal(_) => "internal_error",
}
}
}
pub type Result<T> = std::result::Result<T, AkmError>;
impl From<std::io::Error> for AkmError {
fn from(e: std::io::Error) -> Self {
AkmError::Internal(anyhow::Error::from(e))
}
}