Skip to main content

unifly_api/command/requests/
dns.rs

1use serde::{Deserialize, Serialize};
2
3use crate::model::DnsPolicyType;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct CreateDnsPolicyRequest {
7    pub name: String,
8    pub policy_type: DnsPolicyType,
9    pub enabled: bool,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub domain: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub domains: Option<Vec<String>>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub upstream: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub value: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    #[serde(alias = "ttlSeconds")]
20    pub ttl_seconds: Option<u32>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub priority: Option<u16>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    #[serde(alias = "ipv4Address")]
25    pub ipv4_address: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    #[serde(alias = "ipv6Address")]
28    pub ipv6_address: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    #[serde(alias = "targetDomain")]
31    pub target_domain: Option<String>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    #[serde(alias = "mailServerDomain")]
34    pub mail_server_domain: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub text: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    #[serde(alias = "ipAddress")]
39    pub ip_address: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    #[serde(alias = "serverDomain")]
42    pub server_domain: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub service: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub protocol: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub port: Option<u16>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub weight: Option<u16>,
51}
52
53#[derive(Debug, Clone, Default, Serialize, Deserialize)]
54pub struct UpdateDnsPolicyRequest {
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub name: Option<String>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub enabled: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub domain: Option<String>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub domains: Option<Vec<String>>,
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub upstream: Option<String>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub value: Option<String>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    #[serde(alias = "ttlSeconds")]
69    pub ttl_seconds: Option<u32>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub priority: Option<u16>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    #[serde(alias = "ipv4Address")]
74    pub ipv4_address: Option<String>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    #[serde(alias = "ipv6Address")]
77    pub ipv6_address: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    #[serde(alias = "targetDomain")]
80    pub target_domain: Option<String>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    #[serde(alias = "mailServerDomain")]
83    pub mail_server_domain: Option<String>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub text: Option<String>,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    #[serde(alias = "ipAddress")]
88    pub ip_address: Option<String>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    #[serde(alias = "serverDomain")]
91    pub server_domain: Option<String>,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub service: Option<String>,
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub protocol: Option<String>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub port: Option<u16>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub weight: Option<u16>,
100}
101
102#[cfg(test)]
103mod tests {
104    use super::CreateDnsPolicyRequest;
105
106    #[test]
107    fn create_dns_policy_request_reads_ttl_alias() {
108        let request: CreateDnsPolicyRequest = serde_json::from_value(serde_json::json!({
109            "name": "Home DNS",
110            "policy_type": "ARecord",
111            "enabled": true,
112            "domain": "printer.home",
113            "value": "192.168.1.20",
114            "ttlSeconds": 120
115        }))
116        .expect("dns policy request should deserialize");
117
118        assert_eq!(request.ttl_seconds, Some(120));
119    }
120}