zabbix_api/trigger/
model.rs

1use serde::{Deserialize, Serialize};
2use serde_with::serde_as;
3use serde_with::DisplayFromStr;
4
5/// API Object: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/trigger/object
6#[serde_as]
7#[derive(Deserialize, Clone, Debug)]
8pub struct ZabbixTrigger {
9    /// ID of the trigger.
10    #[serde(alias = "triggerid")]
11    pub trigger_id: String,
12
13    /// Event name generated by the trigger.
14    pub event_name: String,
15
16    /// URL associated with the trigger.
17    pub url: String,
18
19    /// Name of the trigger (required).
20    pub description: String,
21
22    /// Reduced trigger expression (required).
23    pub expression: String,
24
25    /// Severity of the trigger.
26    ///
27    /// Possible values are:
28    ///
29    /// 0 - (default) not classified;
30    ///
31    /// 1 - information;
32    ///
33    /// 2 - warning;
34    ///
35    /// 3 - average;
36    ///
37    /// 4 - high;
38    ///
39    /// 5 - disaster.
40    #[serde_as(as = "DisplayFromStr")]
41    pub priority: u8,
42
43    /// OK event generation mode.
44    ///
45    /// Possible values are:
46    ///
47    /// 0 - (default) Expression;
48    ///
49    /// 1 - Recovery expression;
50    ///
51    /// 2 - None.
52    #[serde_as(as = "DisplayFromStr")]
53    pub recovery_mode: u8,
54
55    /// Reduced trigger recovery expression.
56    pub recovery_expression: String,
57}
58
59/// API Object: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/trigger/object#trigger-tag
60#[derive(Serialize, Deserialize, Clone, Debug)]
61pub struct ZabbixTriggerTag {
62    pub tag: String,
63    pub value: String,
64}
65
66#[cfg(test)]
67mod trigger_tests {
68    use super::ZabbixTrigger;
69
70    #[test]
71    fn deserialize_test() {
72        let input = r#"
73            {"triggerid":"24099","expression":"{34519}>=1","description":"Site 'example.com' is unavailable","url":"https://example.com","status":"0","value":"0","priority":"4","lastchange":"0","comments":"","error":"","templateid":"0","type":"0","state":"0","flags":"0","recovery_mode":"1","recovery_expression":"{34520}=0","correlation_mode":"0","correlation_tag":"","manual_close":"0","opdata":"","event_name":"example.com is down","uuid":"","url_name":"","functions":[{"functionid":"34519","itemid":"48175","triggerid":"24099","parameter":"$,#3","function":"avg"},{"functionid":"34520","itemid":"48175","triggerid":"24099","parameter":"$","function":"last"}]}
74            "#;
75
76        let result: ZabbixTrigger = serde_json::from_str(&input).unwrap();
77
78        assert_eq!(result.priority, 4);
79        assert_eq!(result.recovery_mode, 1);
80    }
81}