ali_dns/
client.rs

1use crate::types::{self, DnsConfig, RRType};
2
3#[derive(Debug)]
4pub struct Client {
5	dns_config: DnsConfig,
6}
7
8impl Client {
9	pub fn from_env() -> anyhow::Result<Self> {
10		let dns_config = DnsConfig::from_env()?;
11		Ok(Self { dns_config })
12	}
13	pub fn new<T: ToString>(access_key_id: T, access_key_secret: T) -> Self {
14		let dns_config = DnsConfig::new(access_key_id.to_string(), access_key_secret.to_string());
15		Self { dns_config }
16	}
17}
18
19impl Client {
20	pub async fn query_domain_records(&self, domain_name: &str) -> anyhow::Result<types::QueryDomainRecordsResponse> {
21		static ACTION: &str = "DescribeDomainRecords";
22		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
23		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
24		request.url_mut().query_pairs_mut().append_pair("DomainName", domain_name);
25		let _ = self.dns_config.sign_request(&mut request)?;
26		let response = self.dns_config.get_request_builder(request)?.send().await?;
27		if !response.status().is_success() {
28			return Ok(types::QueryDomainRecordsResponse::Error(response.json().await?));
29		}
30		Ok(types::QueryDomainRecordsResponse::Success(response.json().await?))
31	}
32	pub async fn add_domain_record(&self, domain_name: &str, rr: &str, rr_type: RRType, value: &str, line: Option<&str>) -> anyhow::Result<types::AddDomainRecordResponse> {
33		static ACTION: &str = "AddDomainRecord";
34		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
35		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
36		request.url_mut().query_pairs_mut().append_pair("DomainName", domain_name);
37		request.url_mut().query_pairs_mut().append_pair("RR", rr);
38		request.url_mut().query_pairs_mut().append_pair("Type", rr_type.to_str());
39		request.url_mut().query_pairs_mut().append_pair("Value", value);
40		if let Some(line) = line {
41			request.url_mut().query_pairs_mut().append_pair("Line", line);
42		}
43		let _ = self.dns_config.sign_request(&mut request)?;
44		let response = self.dns_config.get_request_builder(request)?.send().await?;
45		if !response.status().is_success() {
46			return Ok(types::AddDomainRecordResponse::Error(response.json().await?));
47		}
48		Ok(types::AddDomainRecordResponse::Success(response.json().await?))
49	}
50	pub async fn update_domain_record(&self, record_id: &str, rr: &str, rr_type: RRType, value: &str, line: Option<&str>) -> anyhow::Result<types::UpdateDomainRecordResponse> {
51		static ACTION: &str = "UpdateDomainRecord";
52		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
53		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
54		request.url_mut().query_pairs_mut().append_pair("RecordId", record_id);
55		request.url_mut().query_pairs_mut().append_pair("RR", rr);
56		request.url_mut().query_pairs_mut().append_pair("Type", rr_type.to_str());
57		request.url_mut().query_pairs_mut().append_pair("Value", value);
58		if let Some(line) = line {
59			request.url_mut().query_pairs_mut().append_pair("Line", line);
60		}
61		let _ = self.dns_config.sign_request(&mut request)?;
62		let response = self.dns_config.get_request_builder(request)?.send().await?;
63		if !response.status().is_success() {
64			return Ok(types::UpdateDomainRecordResponse::Error(response.json().await?));
65		}
66		Ok(types::UpdateDomainRecordResponse::Success(response.json().await?))
67	}
68	pub async fn delete_domain_record(&self, record_id: &str) -> anyhow::Result<types::DelDomainRecordResponse> {
69		static ACTION: &str = "DeleteDomainRecord";
70		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
71		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
72		request.url_mut().query_pairs_mut().append_pair("RecordId", record_id);
73		let _ = self.dns_config.sign_request(&mut request)?;
74		let response = self.dns_config.get_request_builder(request)?.send().await?;
75		if !response.status().is_success() {
76			return Ok(types::DelDomainRecordResponse::Error(response.json().await?));
77		}
78		Ok(types::DelDomainRecordResponse::Success(response.json().await?))
79	}
80}