ali-dns 0.0.1

an aliyun dns skd
Documentation
use crate::types::{self, DnsConfig, RRType};

#[derive(Debug)]
pub struct Client {
	dns_config: DnsConfig,
}

impl Client {
	pub fn from_env() -> anyhow::Result<Self> {
		let dns_config = DnsConfig::from_env()?;
		Ok(Self { dns_config })
	}
	pub fn new<T: ToString>(access_key_id: T, access_key_secret: T) -> Self {
		let dns_config = DnsConfig::new(access_key_id.to_string(), access_key_secret.to_string());
		Self { dns_config }
	}
}

impl Client {
	pub async fn query_domain_records(&self, domain_name: &str) -> anyhow::Result<types::QueryDomainRecordsResponse> {
		static ACTION: &str = "DescribeDomainRecords";
		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
		request.url_mut().query_pairs_mut().append_pair("DomainName", domain_name);
		let _ = self.dns_config.sign_request(&mut request)?;
		let response = self.dns_config.get_request_builder(request)?.send().await?;
		if !response.status().is_success() {
			return Ok(types::QueryDomainRecordsResponse::Error(response.json().await?));
		}
		Ok(types::QueryDomainRecordsResponse::Success(response.json().await?))
	}
	pub async fn add_domain_record(&self, domain_name: &str, rr: &str, rr_type: RRType, value: &str, line: Option<&str>) -> anyhow::Result<types::AddDomainRecordResponse> {
		static ACTION: &str = "AddDomainRecord";
		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
		request.url_mut().query_pairs_mut().append_pair("DomainName", domain_name);
		request.url_mut().query_pairs_mut().append_pair("RR", rr);
		request.url_mut().query_pairs_mut().append_pair("Type", rr_type.to_str());
		request.url_mut().query_pairs_mut().append_pair("Value", value);
		if let Some(line) = line {
			request.url_mut().query_pairs_mut().append_pair("Line", line);
		}
		let _ = self.dns_config.sign_request(&mut request)?;
		let response = self.dns_config.get_request_builder(request)?.send().await?;
		if !response.status().is_success() {
			return Ok(types::AddDomainRecordResponse::Error(response.json().await?));
		}
		Ok(types::AddDomainRecordResponse::Success(response.json().await?))
	}
	pub async fn update_domain_record(&self, record_id: &str, rr: &str, rr_type: RRType, value: &str, line: Option<&str>) -> anyhow::Result<types::UpdateDomainRecordResponse> {
		static ACTION: &str = "UpdateDomainRecord";
		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
		request.url_mut().query_pairs_mut().append_pair("RecordId", record_id);
		request.url_mut().query_pairs_mut().append_pair("RR", rr);
		request.url_mut().query_pairs_mut().append_pair("Type", rr_type.to_str());
		request.url_mut().query_pairs_mut().append_pair("Value", value);
		if let Some(line) = line {
			request.url_mut().query_pairs_mut().append_pair("Line", line);
		}
		let _ = self.dns_config.sign_request(&mut request)?;
		let response = self.dns_config.get_request_builder(request)?.send().await?;
		if !response.status().is_success() {
			return Ok(types::UpdateDomainRecordResponse::Error(response.json().await?));
		}
		Ok(types::UpdateDomainRecordResponse::Success(response.json().await?))
	}
	pub async fn delete_domain_record(&self, record_id: &str) -> anyhow::Result<types::DelDomainRecordResponse> {
		static ACTION: &str = "DeleteDomainRecord";
		let mut request = self.dns_config.get_request(reqwest::Method::GET, None)?;
		request.url_mut().query_pairs_mut().append_pair("Action", ACTION);
		request.url_mut().query_pairs_mut().append_pair("RecordId", record_id);
		let _ = self.dns_config.sign_request(&mut request)?;
		let response = self.dns_config.get_request_builder(request)?.send().await?;
		if !response.status().is_success() {
			return Ok(types::DelDomainRecordResponse::Error(response.json().await?));
		}
		Ok(types::DelDomainRecordResponse::Success(response.json().await?))
	}
}