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#[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#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
59pub struct ZabbixHostTag {
60 pub tag: String,
61 pub value: String,
62}
63
64#[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}