#[derive(Debug, thiserror::Error)]
pub enum SkillError {
#[error("{0}")]
Parse(String),
#[error("{message}")]
Validation {
message: String,
errors: Vec<String>,
},
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
}
impl SkillError {
pub fn parse(message: impl Into<String>) -> Self {
Self::Parse(message.into())
}
pub fn validation(message: impl Into<String>) -> Self {
let msg = message.into();
Self::Validation {
message: msg.clone(),
errors: vec![msg],
}
}
pub fn validation_multiple(message: impl Into<String>, errors: Vec<String>) -> Self {
Self::Validation {
message: message.into(),
errors,
}
}
pub fn errors(&self) -> Option<&[String]> {
match self {
Self::Validation { errors, .. } => Some(errors),
_ => None,
}
}
}
pub type Result<T> = std::result::Result<T, SkillError>;