#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum NoticeLevel {
Debug,
Log,
Info,
Notice,
Warning,
}
impl NoticeLevel {
pub fn parse(name: &str) -> Option<Self> {
let name = name.to_ascii_uppercase();
match name.as_str() {
"LOG" => Some(NoticeLevel::Log),
"INFO" => Some(NoticeLevel::Info),
"NOTICE" => Some(NoticeLevel::Notice),
"WARNING" => Some(NoticeLevel::Warning),
_ if name.starts_with("DEBUG") => Some(NoticeLevel::Debug),
_ => None,
}
}
pub const fn as_str(self) -> &'static str {
match self {
NoticeLevel::Debug => "DEBUG",
NoticeLevel::Log => "LOG",
NoticeLevel::Info => "INFO",
NoticeLevel::Notice => "NOTICE",
NoticeLevel::Warning => "WARNING",
}
}
pub const fn message_level(self) -> u8 {
use crate::semantics::parameters::catalog::message_levels;
match self {
NoticeLevel::Debug => message_levels::DEBUG1,
NoticeLevel::Log => message_levels::LOG,
NoticeLevel::Info => message_levels::INFO,
NoticeLevel::Notice => message_levels::NOTICE,
NoticeLevel::Warning => message_levels::WARNING,
}
}
pub const fn reaches_client(self, minimum: u8) -> bool {
matches!(self, NoticeLevel::Info) || self.message_level() >= minimum
}
pub const fn default_sqlstate(self) -> &'static str {
match self {
NoticeLevel::Warning => "01000",
NoticeLevel::Debug | NoticeLevel::Log | NoticeLevel::Info | NoticeLevel::Notice => {
"00000"
}
}
}
}