1use std::collections::HashMap;
2
3use crate::client::DnaClient;
4use crate::error::DnaResult;
5use crate::models::contact::{
6 ContactInfo, ContactInput, ContactPayload, SaveContactsPayload, SaveContactsResponse,
7};
8use crate::models::domain::DomainInfoResponse;
9use crate::ops::util::{build_contact_payload, parse_contacts};
10
11impl DnaClient {
12 pub async fn get_contacts(&self, domain_name: &str) -> DnaResult<HashMap<String, ContactInfo>> {
17 let query = [("DomainName", domain_name)];
18 let raw: DomainInfoResponse = self.http.get("domains/info", Some(&query)).await?;
19 Ok(parse_contacts(raw.contacts.unwrap_or_default()))
20 }
21
22 pub async fn save_contacts(
27 &self,
28 domain_name: &str,
29 contacts: HashMap<&str, ContactInput>,
30 ) -> DnaResult<HashMap<String, ContactInfo>> {
31 let payload_contacts: Vec<ContactPayload> = contacts
32 .iter()
33 .map(|(t, c)| build_contact_payload(c, t))
34 .collect();
35
36 let payload = SaveContactsPayload {
37 domain_name: domain_name.into(),
38 contacts: payload_contacts,
39 };
40
41 let resp: SaveContactsResponse = self.http.put("domains/contacts/update", &payload).await?;
42
43 Ok(parse_contacts(resp.contacts.unwrap_or_default()))
44 }
45}