#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Severity {
Error,
Warning,
Info,
Hint,
}
impl Severity {
pub const ALL: [Severity; 4] = [
Severity::Error,
Severity::Warning,
Severity::Info,
Severity::Hint,
];
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Severity::Error => "error",
Severity::Warning => "warning",
Severity::Info => "info",
Severity::Hint => "hint",
}
}
#[must_use]
pub const fn from_str(value: &str) -> Option<Self> {
match value.as_bytes() {
b"error" => Some(Severity::Error),
b"warning" => Some(Severity::Warning),
b"info" => Some(Severity::Info),
b"hint" => Some(Severity::Hint),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Advisory {
Warning,
Info,
Hint,
}
impl Advisory {
pub const ALL: [Advisory; 3] = [Advisory::Warning, Advisory::Info, Advisory::Hint];
#[must_use]
pub const fn severity(self) -> Severity {
match self {
Advisory::Warning => Severity::Warning,
Advisory::Info => Severity::Info,
Advisory::Hint => Severity::Hint,
}
}
#[must_use]
pub const fn from_severity(severity: Severity) -> Option<Self> {
match severity {
Severity::Error => None,
Severity::Warning => Some(Advisory::Warning),
Severity::Info => Some(Advisory::Info),
Severity::Hint => Some(Advisory::Hint),
}
}
}
impl From<Advisory> for Severity {
fn from(advisory: Advisory) -> Self {
advisory.severity()
}
}