server_watchdog/domain/config/
event.rs1use derive_new::new;
2use serde::{Deserialize, Serialize};
3use struct_input::StructInput;
4
5#[derive(Serialize, Deserialize, Debug, Clone, StructInput)]
6pub struct EventConfig {
7 #[struct_input(format="Name")]
8 pub name: String,
9 #[struct_input(format="Name", message="--- type (logs, health) ---")]
10 pub r#type: String, #[struct_input(format="Name", message="--- target server name ---")]
12 pub target: String, #[struct_input]
14 pub keyword: String,
15}
16
17#[derive(Serialize, Deserialize, Debug, new, Clone)]
18pub struct EventSubscribeList {
19 #[new(default)]
20 pub subscribes: Vec<EventSubscribe>
21}
22
23impl EventSubscribeList {
24
25 pub fn unsubscribe(&mut self, event_name: &str, chat_id: &str) {
26 if let Some(subscribes) = self.find_subscribe_mut(event_name) {
27 subscribes.chat_ids.retain(|id|{ id != chat_id})
28 }
29 }
30
31 pub fn find_subscribed_events(&self, chat_id: &str) -> Vec<&str> {
32 self.subscribes.iter()
33 .filter(|subscribe| {subscribe.contains(chat_id)})
34 .map(|subscribe| {subscribe.event_name.as_str()})
35 .collect()
36 }
37
38 pub fn find_subscribe(&self, event_name: &str) -> Option<&EventSubscribe> {
39 self.subscribes.iter()
40 .filter(|subscribe| {subscribe.event_name.eq(event_name)})
41 .next()
42 }
43
44 pub fn find_subscribe_mut(&mut self, event_name: &str) -> Option<&mut EventSubscribe> {
45 self.subscribes.iter_mut()
46 .filter(|subscribe| {subscribe.event_name.eq(event_name)})
47 .next()
48 }
49
50
51 pub fn contains(&self, event_name: &str, chat_id: &str) -> bool {
52 match self.find_subscribe(event_name) {
53 Some(subscribe) => {
54 subscribe.contains(chat_id)
55 },
56 None => false
57 }
58 }
59}
60
61#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
62pub struct EventSubscribe {
63 pub event_name: String,
64 pub chat_ids: Vec<String>
65}
66
67impl EventSubscribe {
68
69 pub fn contains(&self, chat_id: &str) -> bool {
70 self.chat_ids.iter().any(|id| id == chat_id)
71 }
72}