use crate::{
data::dns_zone::{DnsZoneOrderBy, ScalewayDnsZone, ScalewayDnsZonesRoot},
ScalewayApi, ScalewayError,
};
pub struct ScalewayListDnsZonesBuilder {
api: ScalewayApi,
params: Vec<(&'static str, String)>,
}
impl ScalewayListDnsZonesBuilder {
pub fn new(api: ScalewayApi) -> Self {
ScalewayListDnsZonesBuilder {
api,
params: vec![],
}
}
pub fn domain(mut self, domain: &str) -> Self {
self.params.push(("domain", domain.to_string()));
self
}
pub fn dns_zone(mut self, dns_zone: &str) -> Self {
self.params.push(("dns_zone", dns_zone.to_string()));
self
}
pub fn project(mut self, project_id: &str) -> Self {
self.params.push(("project_id", project_id.to_string()));
self
}
pub fn organization(mut self, organization_id: &str) -> Self {
self.params
.push(("organization_id", organization_id.to_string()));
self
}
pub fn order_by(mut self, order: DnsZoneOrderBy) -> Self {
self.params.push(("order_by", order.to_string()));
self
}
pub fn page_size(mut self, size: u32) -> Self {
self.params.push(("page_size", size.to_string()));
self
}
#[cfg(feature = "blocking")]
pub fn run(self) -> Result<Vec<ScalewayDnsZone>, ScalewayError> {
let mut list = vec![];
let mut page = 1u32;
loop {
let mut params = self.params.clone();
params.push(("page", page.to_string()));
let result = self
.api
.get(
"https://api.scaleway.com/domain/v2beta1/dns-zones",
params,
)?
.json::<ScalewayDnsZonesRoot>()?;
if result.dns_zones.is_empty() {
break;
}
list.extend(result.dns_zones);
page += 1;
}
Ok(list)
}
pub async fn run_async(self) -> Result<Vec<ScalewayDnsZone>, ScalewayError> {
let mut list = vec![];
let mut page = 1u32;
loop {
let mut params = self.params.clone();
params.push(("page", page.to_string()));
let result = self
.api
.get_async(
"https://api.scaleway.com/domain/v2beta1/dns-zones",
params,
)
.await?
.json::<ScalewayDnsZonesRoot>()
.await?;
if result.dns_zones.is_empty() {
break;
}
list.extend(result.dns_zones);
page += 1;
}
Ok(list)
}
}