ripht_php_sapi/execution/
message.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum SyslogLevel {
4 Emergency = 0,
5 Alert = 1,
6 Critical = 2,
7 Error = 3,
8 Warning = 4,
9 Notice = 5,
10 Info = 6,
11 Debug = 7,
12}
13
14impl SyslogLevel {
15 pub fn from_raw(level: i32) -> Self {
16 match level {
17 0 => Self::Emergency,
18 1 => Self::Alert,
19 2 => Self::Critical,
20 3 => Self::Error,
21 4 => Self::Warning,
22 5 => Self::Notice,
23 6 => Self::Info,
24 7 => Self::Debug,
25 _ if level < 0 => Self::Emergency,
26 _ => Self::Debug,
27 }
28 }
29
30 pub fn is_error_or_worse(&self) -> bool {
31 matches!(
32 self,
33 Self::Emergency | Self::Alert | Self::Critical | Self::Error
34 )
35 }
36
37 pub fn is_warning_or_worse(&self) -> bool {
38 self.is_error_or_worse() || matches!(self, Self::Warning)
39 }
40
41 pub fn as_str(&self) -> &'static str {
42 match self {
43 Self::Emergency => "emerg",
44 Self::Alert => "alert",
45 Self::Critical => "crit",
46 Self::Error => "err",
47 Self::Warning => "warning",
48 Self::Notice => "notice",
49 Self::Info => "info",
50 Self::Debug => "debug",
51 }
52 }
53}
54
55impl std::fmt::Display for SyslogLevel {
56 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
57 write!(f, "{}", self.as_str())
58 }
59}
60
61impl From<i32> for SyslogLevel {
62 fn from(level: i32) -> Self {
63 Self::from_raw(level)
64 }
65}
66
67impl From<SyslogLevel> for i32 {
68 fn from(level: SyslogLevel) -> Self {
69 level as i32
70 }
71}
72
73#[derive(Debug, Clone)]
75#[non_exhaustive]
76pub struct ExecutionMessage {
77 pub message: String,
78 pub level: SyslogLevel,
79}
80
81impl ExecutionMessage {
82 pub fn new(level: SyslogLevel, message: impl Into<String>) -> Self {
83 Self {
84 message: message.into(),
85 level,
86 }
87 }
88
89 pub fn from_syslog(syslog_level: i32, message: impl Into<String>) -> Self {
90 Self::new(SyslogLevel::from_raw(syslog_level), message)
91 }
92
93 pub fn is_error(&self) -> bool {
94 self.level.is_error_or_worse()
95 }
96
97 pub fn is_warning(&self) -> bool {
98 matches!(self.level, SyslogLevel::Warning)
99 }
100
101 pub fn is_warning_or_worse(&self) -> bool {
102 self.level
103 .is_warning_or_worse()
104 }
105}
106
107impl std::fmt::Display for ExecutionMessage {
108 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
109 write!(f, "[{}] {}", self.level, self.message)
110 }
111}