use crate::{
data::image::{ScalewayImage, ScalewayImageRoot},
ScalewayApi, ScalewayError,
};
pub struct ScalewayListInstanceImagesBuilder {
api: ScalewayApi,
zone: String,
params: Vec<(&'static str, String)>,
}
impl ScalewayListInstanceImagesBuilder {
pub fn new(api: ScalewayApi, zone: &str) -> Self {
ScalewayListInstanceImagesBuilder {
api,
zone: zone.to_string(),
params: vec![],
}
}
pub fn per_page(mut self, count: u32) -> ScalewayListInstanceImagesBuilder {
self.params.push(("per_page", count.to_string()));
self
}
pub fn page(mut self, count: u32) -> ScalewayListInstanceImagesBuilder {
self.params.push(("page", count.to_string()));
self
}
pub fn organization(mut self, organization: &str) -> ScalewayListInstanceImagesBuilder {
self.params.push(("organization", organization.to_string()));
self
}
pub fn project(mut self, project: &str) -> ScalewayListInstanceImagesBuilder {
self.params.push(("project", project.to_string()));
self
}
pub fn public(mut self, public: bool) -> ScalewayListInstanceImagesBuilder {
self.params.push(("public", public.to_string()));
self
}
pub fn name(mut self, name: &str) -> ScalewayListInstanceImagesBuilder {
self.params.push(("name", name.to_string()));
self
}
pub fn arch(mut self, arch: &str) -> ScalewayListInstanceImagesBuilder {
self.params.push(("arch", arch.to_string()));
self
}
pub fn tags(mut self, tags: &str) -> ScalewayListInstanceImagesBuilder {
self.params.push(("tags", tags.to_string()));
self
}
#[cfg(feature = "blocking")]
pub fn run(self) -> Result<Vec<ScalewayImage>, ScalewayError> {
let url = &format!(
"https://api.scaleway.com/instance/v1/zones/{zone}/images",
zone = self.zone
);
Ok(self
.api
.get(&url, self.params)?
.json::<ScalewayImageRoot>()?
.images)
}
pub async fn run_async(self) -> Result<Vec<ScalewayImage>, ScalewayError> {
let url = &format!(
"https://api.scaleway.com/instance/v1/zones/{zone}/images",
zone = self.zone
);
Ok(self
.api
.get_async(&url, self.params)
.await?
.json::<ScalewayImageRoot>()
.await?
.images)
}
}