1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
11pub enum NoticeLevel {
12 Debug,
14 Log,
15 Info,
16 Notice,
17 Warning,
18}
19
20impl NoticeLevel {
21 pub fn parse(name: &str) -> Option<Self> {
23 let name = name.to_ascii_uppercase();
24 match name.as_str() {
25 "LOG" => Some(NoticeLevel::Log),
26 "INFO" => Some(NoticeLevel::Info),
27 "NOTICE" => Some(NoticeLevel::Notice),
28 "WARNING" => Some(NoticeLevel::Warning),
29 _ if name.starts_with("DEBUG") => Some(NoticeLevel::Debug),
30 _ => None,
31 }
32 }
33
34 pub const fn as_str(self) -> &'static str {
36 match self {
37 NoticeLevel::Debug => "DEBUG",
38 NoticeLevel::Log => "LOG",
39 NoticeLevel::Info => "INFO",
40 NoticeLevel::Notice => "NOTICE",
41 NoticeLevel::Warning => "WARNING",
42 }
43 }
44
45 pub const fn message_level(self) -> u8 {
47 use crate::semantics::parameters::catalog::message_levels;
48 match self {
49 NoticeLevel::Debug => message_levels::DEBUG1,
50 NoticeLevel::Log => message_levels::LOG,
51 NoticeLevel::Info => message_levels::INFO,
52 NoticeLevel::Notice => message_levels::NOTICE,
53 NoticeLevel::Warning => message_levels::WARNING,
54 }
55 }
56
57 pub const fn reaches_client(self, minimum: u8) -> bool {
59 matches!(self, NoticeLevel::Info) || self.message_level() >= minimum
60 }
61
62 pub const fn default_sqlstate(self) -> &'static str {
64 match self {
65 NoticeLevel::Warning => "01000",
66 NoticeLevel::Debug | NoticeLevel::Log | NoticeLevel::Info | NoticeLevel::Notice => {
67 "00000"
68 }
69 }
70 }
71}