use crate::data::project::{ScalewayProject, ScalewayProjectsRoot};
use crate::ScalewayApi;
use crate::ScalewayError;
pub struct ScalewayListProjectsBuilder {
api: ScalewayApi,
params: Vec<(&'static str, String)>,
}
impl ScalewayListProjectsBuilder {
pub fn new(api: ScalewayApi) -> Self {
ScalewayListProjectsBuilder {
api,
params: vec![],
}
}
pub fn organization_id(mut self, organization_id: &str) -> ScalewayListProjectsBuilder {
self.params.push(("organization_id", organization_id.to_string()));
self
}
pub fn name(mut self, name: &str) -> ScalewayListProjectsBuilder {
self.params.push(("name", name.to_string()));
self
}
pub fn order_by(mut self, order_by: &str) -> ScalewayListProjectsBuilder {
self.params.push(("order_by", order_by.to_string()));
self
}
pub fn page_size(mut self, page_size: u32) -> ScalewayListProjectsBuilder {
self.params.push(("page_size", page_size.to_string()));
self
}
#[cfg(feature = "blocking")]
pub fn run(self) -> Result<Vec<ScalewayProject>, ScalewayError> {
let mut list = vec![];
let mut page = 1;
loop {
let mut params = self.params.clone();
params.push(("page", page.to_string()));
let result = self
.api
.get("https://api.scaleway.com/account/v3/projects", params)?
.json::<ScalewayProjectsRoot>()?;
if result.projects.is_empty() {
break;
}
list.extend(result.projects.into_iter());
page += 1;
}
Ok(list)
}
pub async fn run_async(self) -> Result<Vec<ScalewayProject>, ScalewayError> {
let mut list = vec![];
let mut page = 1;
loop {
let mut params = self.params.clone();
params.push(("page", page.to_string()));
let result = self
.api
.get_async("https://api.scaleway.com/account/v3/projects", params)
.await?
.json::<ScalewayProjectsRoot>()
.await?;
if result.projects.is_empty() {
break;
}
list.extend(result.projects.into_iter());
page += 1;
}
Ok(list)
}
}