use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SkillError {
Parse(String),
Validation {
message: String,
errors: Vec<String>,
},
}
impl SkillError {
pub fn parse(message: impl Into<String>) -> Self {
SkillError::Parse(message.into())
}
pub fn validation(message: impl Into<String>) -> Self {
let message = message.into();
SkillError::Validation {
errors: vec![message.clone()],
message,
}
}
pub fn validation_many(errors: Vec<String>) -> Self {
let message = errors.first().cloned().unwrap_or_default();
SkillError::Validation { message, errors }
}
pub fn errors(&self) -> Vec<String> {
match self {
SkillError::Parse(m) => vec![m.clone()],
SkillError::Validation { errors, .. } => errors.clone(),
}
}
}
impl fmt::Display for SkillError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SkillError::Parse(m) => write!(f, "{m}"),
SkillError::Validation { message, .. } => write!(f, "{message}"),
}
}
}
impl std::error::Error for SkillError {}
pub type Result<T> = std::result::Result<T, SkillError>;