use crate::StrictnessLevel;
use std::fmt;
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum ErrorLevel {
BreakingError,
InvalidatingError,
StrictWarning,
LooseWarning,
GeneralWarning,
}
impl ErrorLevel {
pub const fn descriptor(&self) -> &str {
match self {
ErrorLevel::BreakingError => "BreakingError",
ErrorLevel::InvalidatingError => "InvalidatingError",
ErrorLevel::StrictWarning => "StrictWarning",
ErrorLevel::LooseWarning => "LooseWarning",
ErrorLevel::GeneralWarning => "GeneralWarning",
}
}
pub const fn fails(&self, level: StrictnessLevel) -> bool {
match level {
StrictnessLevel::Strict => true,
StrictnessLevel::Medium => !matches!(self, ErrorLevel::GeneralWarning),
StrictnessLevel::Loose => {
!matches!(self, ErrorLevel::GeneralWarning | ErrorLevel::LooseWarning)
}
}
}
}
impl fmt::Display for ErrorLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.descriptor())
}
}