icinga2_api/types/monitoring_objects/
notification.rs1use std::collections::BTreeMap;
8
9use serde::{Deserialize, Serialize};
10
11use crate::serde::{
12 deserialize_optional_icinga_timestamp, deserialize_optional_seconds_as_duration,
13 serialize_optional_duration_as_seconds, serialize_optional_icinga_timestamp,
14};
15use crate::types::common::custom_var_object::CustomVarHolder;
16use crate::types::enums::notification_filter::IcingaNotificationFilter;
17use crate::types::enums::notification_type::IcingaNotificationType;
18use crate::types::{
19 common::custom_var_object::IcingaCustomVarObject,
20 enums::object_type::IcingaObjectType,
21 names::{
22 IcingaEndpointName, IcingaHostName, IcingaNotificationCommandName, IcingaServiceName,
23 IcingaTimePeriodName, IcingaUserGroupName, IcingaUserName,
24 },
25};
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
29pub struct IcingaNotification {
30 #[serde(rename = "type")]
32 pub object_type: IcingaObjectType,
33 #[serde(flatten)]
35 pub custom_var: IcingaCustomVarObject,
36 pub command: Option<IcingaNotificationCommandName>,
38 #[serde(
40 serialize_with = "serialize_optional_duration_as_seconds",
41 deserialize_with = "deserialize_optional_seconds_as_duration"
42 )]
43 pub interval: Option<time::Duration>,
44 pub period: Option<IcingaTimePeriodName>,
46 pub users: Option<Vec<IcingaUserName>>,
48 pub user_groups: Option<Vec<IcingaUserGroupName>>,
50 pub times: Option<BTreeMap<String, serde_json::Value>>,
52 pub types: Option<Vec<IcingaNotificationType>>,
54 pub states: Option<Vec<IcingaNotificationFilter>>,
56 pub host_name: IcingaHostName,
58 pub service_name: Option<IcingaServiceName>,
60 pub notified_problem_users: Option<Vec<IcingaUserName>>,
62 pub no_more_notifications: Option<bool>,
64 #[serde(
66 serialize_with = "serialize_optional_icinga_timestamp",
67 deserialize_with = "deserialize_optional_icinga_timestamp"
68 )]
69 pub last_notification: Option<time::OffsetDateTime>,
70 #[serde(
72 serialize_with = "serialize_optional_icinga_timestamp",
73 deserialize_with = "deserialize_optional_icinga_timestamp"
74 )]
75 pub next_notification: Option<time::OffsetDateTime>,
76 pub notification_number: u64,
78 #[serde(
80 serialize_with = "serialize_optional_icinga_timestamp",
81 deserialize_with = "deserialize_optional_icinga_timestamp"
82 )]
83 pub last_problem_notification: Option<time::OffsetDateTime>,
84 pub command_endpoint: Option<IcingaEndpointName>,
86}
87
88impl CustomVarHolder for IcingaNotification {
89 fn custom_var_value(&self, name: &str) -> Option<&serde_json::Value> {
90 self.custom_var.custom_var_value(name)
91 }
92}