ferro_notifications/
channel.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum Channel {
9 Mail,
11 Database,
13 Slack,
15 #[serde(rename = "whatsapp")]
19 WhatsApp,
20 #[serde(rename = "in_app")]
25 InApp,
26 Sms,
28 Push,
30}
31
32impl Channel {
33 pub fn as_str(&self) -> &'static str {
35 match self {
36 Channel::Mail => "mail",
37 Channel::Database => "database",
38 Channel::Slack => "slack",
39 Channel::WhatsApp => "whatsapp",
40 Channel::InApp => "in_app",
41 Channel::Sms => "sms",
42 Channel::Push => "push",
43 }
44 }
45}
46
47impl std::fmt::Display for Channel {
48 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
49 write!(f, "{}", self.as_str())
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_channel_as_str() {
59 assert_eq!(Channel::Mail.as_str(), "mail");
60 assert_eq!(Channel::Database.as_str(), "database");
61 assert_eq!(Channel::Slack.as_str(), "slack");
62 assert_eq!(Channel::WhatsApp.as_str(), "whatsapp");
63 assert_eq!(Channel::InApp.as_str(), "in_app");
64 assert_eq!(Channel::Sms.as_str(), "sms");
65 assert_eq!(Channel::Push.as_str(), "push");
66 }
67
68 #[test]
69 fn test_channel_display() {
70 assert_eq!(format!("{}", Channel::Mail), "mail");
71 assert_eq!(format!("{}", Channel::WhatsApp), "whatsapp");
72 assert_eq!(format!("{}", Channel::InApp), "in_app");
73 }
74
75 #[test]
76 fn test_channel_serialization() {
77 assert_eq!(
79 serde_json::to_string(&Channel::WhatsApp).unwrap(),
80 "\"whatsapp\""
81 );
82 assert_eq!(
83 serde_json::to_string(&Channel::InApp).unwrap(),
84 "\"in_app\""
85 );
86 assert_eq!(serde_json::to_string(&Channel::Mail).unwrap(), "\"mail\"");
87 assert_eq!(serde_json::to_string(&Channel::Sms).unwrap(), "\"sms\"");
88 assert_eq!(serde_json::to_string(&Channel::Push).unwrap(), "\"push\"");
89 }
90
91 #[test]
92 fn test_channel_deserialization() {
93 assert_eq!(
95 serde_json::from_str::<Channel>("\"whatsapp\"").unwrap(),
96 Channel::WhatsApp
97 );
98 assert_eq!(
99 serde_json::from_str::<Channel>("\"in_app\"").unwrap(),
100 Channel::InApp
101 );
102 assert_eq!(
103 serde_json::from_str::<Channel>("\"mail\"").unwrap(),
104 Channel::Mail
105 );
106 assert_eq!(
107 serde_json::from_str::<Channel>("\"database\"").unwrap(),
108 Channel::Database
109 );
110 assert_eq!(
111 serde_json::from_str::<Channel>("\"slack\"").unwrap(),
112 Channel::Slack
113 );
114 assert!(
116 serde_json::from_str::<Channel>("\"inapp\"").is_err(),
117 "InApp must not accept the unrenamed `inapp` form"
118 );
119 }
120}