x_46ki75_notification_lib/
notification.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug, Clone)]
4pub enum StageName {
5 #[serde(rename = "dev")]
6 Development,
7
8 #[serde(rename = "stg")]
9 Staging,
10
11 #[serde(rename = "prod")]
12 Production,
13}
14
15impl std::fmt::Display for StageName {
16 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17 write!(
18 f,
19 "{}",
20 String::from(match self {
21 StageName::Development => "dev",
22 StageName::Staging => "stg",
23 StageName::Production => "prod",
24 })
25 )
26 }
27}
28
29#[derive(Serialize, Deserialize, Debug, Default, Clone)]
30pub enum Status {
31 #[default]
32 #[serde(rename = "NEW")]
33 New,
34
35 #[serde(rename = "OPEN")]
36 Open,
37
38 #[serde(rename = "RESOLVED")]
39 Resolved,
40
41 #[serde(rename = "SUPPRESSED")]
42 Suppressed,
43}
44
45impl std::fmt::Display for Status {
46 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47 write!(
48 f,
49 "{}",
50 String::from(match self {
51 Status::New => "NEW",
52 Status::Open => "OPEN",
53 Status::Resolved => "RESOLVED",
54 Status::Suppressed => "SUPPRESSED",
55 })
56 )
57 }
58}
59
60impl<T> From<T> for Status
61where
62 T: AsRef<str>,
63{
64 fn from(value: T) -> Self {
65 match value.as_ref() {
66 "NEW" => Self::New,
67 "OPEN" => Self::Open,
68 "RESOLVE" => Self::Resolved,
69 "SUPPRESSED" => Self::Suppressed,
70 _ => Self::New,
71 }
72 }
73}
74
75#[derive(Serialize, Deserialize, Debug, Default, Clone)]
76pub enum Severity {
77 #[default]
78 #[serde(rename = "INFO")]
79 Info,
80
81 #[serde(rename = "WARN")]
82 Warn,
83
84 #[serde(rename = "ERROR")]
85 Error,
86}
87
88impl std::fmt::Display for Severity {
89 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
90 write!(
91 f,
92 "{}",
93 String::from(match self {
94 Severity::Info => "INFO",
95 Severity::Warn => "WARN",
96 Severity::Error => "ERROR",
97 })
98 )
99 }
100}
101
102impl<T> From<T> for Severity
103where
104 T: AsRef<str>,
105{
106 fn from(value: T) -> Self {
107 match value.as_ref() {
108 "INFO" => Self::Info,
109 "WARN" => Self::Warn,
110 "ERROR" => Self::Error,
111 _ => Self::Info,
112 }
113 }
114}
115
116#[derive(Serialize, Deserialize, Debug, Default, Clone)]
117pub struct Notification {
118 pub pk: String,
119 pub title: String,
120 pub details: Option<String>,
121 pub severity: Severity,
122 pub status: Status,
123 pub url: Option<String>,
124 pub notified_at: String,
125}
126
127#[derive(Serialize, Deserialize, Debug, Clone)]
130pub enum Request {
131 #[serde(rename = "put")]
132 Put(PutCommand),
133
134 #[serde(rename = "list")]
135 List(ListCommand),
136
137 #[serde(rename = "delete")]
138 Delete(DeleteCommand),
139}
140
141#[derive(Serialize, Deserialize, Debug, Default, Clone)]
142pub struct PutCommand {
143 pub pk: Option<String>,
144 pub title: Option<String>,
145 pub details: Option<String>,
146 pub severity: Option<Severity>,
147 pub status: Option<Status>,
148 pub url: Option<String>,
149}
150
151#[derive(Serialize, Deserialize, Debug, Default, Clone)]
152pub struct ListCommand {
153 pub status: Vec<Status>,
154}
155
156#[derive(Serialize, Deserialize, Debug, Default, Clone)]
157pub struct DeleteCommand {
158 pub pk: String,
159}
160
161#[derive(Serialize, Deserialize, Debug, Default, Clone)]
164pub struct Response {
165 pub results: Vec<Notification>,
166}