zabbix_api/host/
model.rs

1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2use std::cmp::PartialEq;
3use std::str::FromStr;
4
5#[derive(Clone, Debug, PartialEq)]
6pub enum HostStatus {
7    Enabled,
8    Disabled,
9}
10
11impl Serialize for HostStatus {
12    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
13    where
14        S: Serializer,
15    {
16        let value = match self {
17            HostStatus::Enabled => "0",
18            HostStatus::Disabled => "1",
19        };
20
21        serializer.serialize_str(value)
22    }
23}
24
25impl<'de> Deserialize<'de> for HostStatus {
26    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
27    where
28        D: Deserializer<'de>,
29    {
30        let value = String::deserialize(deserializer)?;
31
32        HostStatus::from_str(&value).map_err(|_| serde::de::Error::custom(format!("Invalid HostStatus value: {}", value)))
33    }
34}
35
36impl FromStr for HostStatus {
37    type Err = ();
38
39    fn from_str(s: &str) -> Result<Self, Self::Err> {
40        match s {
41            "0" => Ok(HostStatus::Enabled),
42            "1" => Ok(HostStatus::Disabled),
43            _ => Err(()),
44        }
45    }
46}
47
48/// API Object: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/host/object
49#[derive(Deserialize, PartialEq, Clone, Debug)]
50pub struct ZabbixHost {
51    #[serde(rename = "hostid")]
52    pub host_id: String,
53    pub host: String,
54    pub status: HostStatus,
55}
56
57// API Object: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/host/object#host-tag
58#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
59pub struct ZabbixHostTag {
60    pub tag: String,
61    pub value: String,
62}
63
64/// API Object: https://www.zabbix.com/documentation/6.0/en/manual/api/reference/hostinterface/object
65#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
66pub struct ZabbixHostInterface {
67    pub r#type: u8,
68
69    pub main: u8,
70
71    pub ip: String,
72
73    pub dns: String,
74
75    pub port: String,
76
77    #[serde(rename = "useip")]
78    pub use_ip: u8,
79}