use crate::der::Enumerated;
#[cfg(feature = "derive")]
use crate::Errorizable;
#[derive(Enumerated, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
#[repr(u8)]
pub enum SyslogSeverity {
Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Informational = 6, Debug = 7, }
impl From<SyslogSeverity> for u8 {
fn from(s: SyslogSeverity) -> Self {
s as u8
}
}
impl core::fmt::Display for SyslogSeverity {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let s = match self {
SyslogSeverity::Emergency => "EMERGENCY",
SyslogSeverity::Alert => "ALERT",
SyslogSeverity::Critical => "CRITICAL",
SyslogSeverity::Error => "ERROR",
SyslogSeverity::Warning => "WARNING",
SyslogSeverity::Notice => "NOTICE",
SyslogSeverity::Informational => "INFORMATIONAL",
SyslogSeverity::Debug => "DEBUG",
};
f.write_str(s)
}
}
impl core::str::FromStr for SyslogSeverity {
type Err = RFC5424Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"EMERGENCY" | "Emergency" | "emergency" | "EMERG" | "emerg" => Ok(SyslogSeverity::Emergency),
"ALERT" | "Alert" | "alert" => Ok(SyslogSeverity::Alert),
"CRITICAL" | "Critical" | "critical" | "CRIT" | "crit" => Ok(SyslogSeverity::Critical),
"ERROR" | "Error" | "error" | "ERR" | "err" => Ok(SyslogSeverity::Error),
"WARNING" | "Warning" | "warning" | "WARN" | "warn" => Ok(SyslogSeverity::Warning),
"NOTICE" | "Notice" | "notice" => Ok(SyslogSeverity::Notice),
"INFORMATIONAL" | "Informational" | "informational" | "INFO" | "info" => Ok(SyslogSeverity::Informational),
"DEBUG" | "Debug" | "debug" => Ok(SyslogSeverity::Debug),
"0" => Ok(SyslogSeverity::Emergency),
"1" => Ok(SyslogSeverity::Alert),
"2" => Ok(SyslogSeverity::Critical),
"3" => Ok(SyslogSeverity::Error),
"4" => Ok(SyslogSeverity::Warning),
"5" => Ok(SyslogSeverity::Notice),
"6" => Ok(SyslogSeverity::Informational),
"7" => Ok(SyslogSeverity::Debug),
_ => Err(RFC5424Error::InvalidSeverityName(s.to_string())),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "derive", derive(Errorizable))]
pub enum RFC5424Error {
#[cfg_attr(feature = "derive", error("invalid RFC5424 severity value: {0}"))]
InvalidSeverityValue(u8),
#[cfg_attr(feature = "derive", error("invalid RFC5424 severity name: {0}"))]
InvalidSeverityName(String),
}
crate::impl_error_display!(RFC5424Error {
InvalidSeverityValue(v) => "invalid RFC5424 severity value: {v}",
InvalidSeverityName(s) => "invalid RFC5424 severity name: {s}",
});