1use serde_json::{Value, json};
2
3use crate::client::DnaClient;
4use crate::error::DnaResult;
5use crate::models::domain::{ChildNsPayload, ModifyChildNsPayload, ModifyNsPayload, NsResponse};
6use crate::ops::util::ip_entry;
7
8impl DnaClient {
9 pub async fn modify_name_server(
11 &self,
12 domain_name: &str,
13 name_servers: Vec<String>,
14 ) -> DnaResult<Vec<String>> {
15 let payload = ModifyNsPayload {
16 domain_name: domain_name.into(),
17 name_servers: name_servers.clone(),
18 };
19 let resp: NsResponse = self.http.put("domains/dns/name-server", &payload).await?;
20 Ok(resp.name_servers.unwrap_or(name_servers))
21 }
22
23 pub async fn add_child_name_server(
25 &self,
26 domain_name: &str,
27 host_name: &str,
28 ip_address: &str,
29 ) -> DnaResult<()> {
30 let payload = ChildNsPayload {
31 domain_name: domain_name.into(),
32 host_name: host_name.into(),
33 ip_addresses: vec![ip_entry(ip_address)],
34 };
35 let _: Value = self.http.post("domains/dns/host", &payload).await?;
36 Ok(())
37 }
38
39 pub async fn delete_child_name_server(
41 &self,
42 domain_name: &str,
43 host_name: &str,
44 ) -> DnaResult<()> {
45 let body = json!({ "domainName": domain_name, "hostName": host_name });
46 let _: Value = self.http.delete("domains/dns/host", Some(&body)).await?;
47 Ok(())
48 }
49
50 pub async fn modify_child_name_server(
52 &self,
53 domain_name: &str,
54 host_name: &str,
55 ip_address: &str,
56 ) -> DnaResult<()> {
57 let payload = ModifyChildNsPayload {
58 domain_name: domain_name.into(),
59 host_name: host_name.into(),
60 new_host_name: host_name.into(),
61 ip_addresses: vec![ip_entry(ip_address)],
62 };
63 let _: Value = self.http.put("domains/dns/host", &payload).await?;
64 Ok(())
65 }
66}