Skip to main content

server_watchdog/domain/config/
event.rs

1use 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, // logs, health
11    #[struct_input(format="Name", message="--- target server name ---")]
12    pub target: String, // target server
13    #[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}