unifly_api/command/requests/
dns.rs1use 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}