scaleway_rs/builder/
list_marketplace_images_builder.rs1use crate::{
2 data::marketplace_image::{ScalewayMarketplaceImage, ScalewayMarketplaceImageRoot},
3 ScalewayApi, ScalewayError,
4};
5
6pub struct ScalewayListMarketplaceImagesBuilder {
7 api: ScalewayApi,
8 params: Vec<(&'static str, String)>,
9}
10
11impl ScalewayListMarketplaceImagesBuilder {
12 pub fn new(api: ScalewayApi) -> Self {
13 ScalewayListMarketplaceImagesBuilder {
14 api,
15 params: vec![],
16 }
17 }
18
19 pub fn order_by(mut self, order_by: &str) -> ScalewayListMarketplaceImagesBuilder {
23 self.params.push(("order_by", order_by.to_string()));
24 self
25 }
26
27 pub fn arch(mut self, arch: &str) -> ScalewayListMarketplaceImagesBuilder {
28 self.params.push(("arch", arch.to_string()));
29 self
30 }
31
32 pub fn category(mut self, category: &str) -> ScalewayListMarketplaceImagesBuilder {
33 self.params.push(("category", category.to_string()));
34 self
35 }
36
37 pub fn include_eol(mut self, include_eol: bool) -> ScalewayListMarketplaceImagesBuilder {
38 self.params.push(("include_eol", include_eol.to_string()));
39 self
40 }
41
42 #[cfg(feature = "blocking")]
43 pub fn run(self) -> Result<Vec<ScalewayMarketplaceImage>, ScalewayError> {
44 let mut list = vec![];
45 let mut page = 1;
46 loop {
47 let mut params = self.params.clone();
48 params.push(("page", page.to_string()));
49 let result = self
50 .api
51 .get("https://api.scaleway.com/marketplace/v2/images", params)?
52 .json::<ScalewayMarketplaceImageRoot>()?;
53 if result.images.len() == 0 {
54 break;
55 }
56 list.extend(result.images.into_iter());
57 if list.len() == (result.total_count as usize) {
58 break;
59 }
60 page += 1;
61 }
62 Ok(list)
63 }
64
65 pub async fn run_async(self) -> Result<Vec<ScalewayMarketplaceImage>, ScalewayError> {
66 let mut list = vec![];
67 let mut page = 1;
68 loop {
69 let mut params = self.params.clone();
70 params.push(("page", page.to_string()));
71 let result = self
72 .api
73 .get_async("https://api.scaleway.com/marketplace/v2/images", params)
74 .await?
75 .json::<ScalewayMarketplaceImageRoot>()
76 .await?;
77 if result.images.len() == 0 {
78 break;
79 }
80 list.extend(result.images.into_iter());
81 if list.len() == (result.total_count as usize) {
82 break;
83 }
84 page += 1;
85 }
86 Ok(list)
87 }
88}