use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
pub enum Severity {
Error,
Warning,
Note,
}
impl Severity {
#[must_use]
#[inline]
pub fn is_error(self) -> bool {
matches!(self, Severity::Error)
}
#[must_use]
#[inline]
pub fn as_str(self) -> &'static str {
match self {
Severity::Error => "error",
Severity::Warning => "warning",
Severity::Note => "note",
}
}
}
impl fmt::Display for Severity {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used)]
mod tests {
use super::*;
use alloc::string::ToString;
#[test]
fn test_is_error_only_true_for_error() {
assert!(Severity::Error.is_error());
assert!(!Severity::Warning.is_error());
assert!(!Severity::Note.is_error());
}
#[test]
fn test_as_str_matches_variant() {
assert_eq!(Severity::Error.as_str(), "error");
assert_eq!(Severity::Warning.as_str(), "warning");
assert_eq!(Severity::Note.as_str(), "note");
}
#[test]
fn test_display_matches_as_str() {
assert_eq!(Severity::Warning.to_string(), "warning");
}
}