1use crate::oss::Client;
2
3use self::builders::DescribeRegionsBuilder;
4
5pub mod builders {
6 use crate::oss::{
7 self,
8 api::{self, ApiResponseFrom},
9 entities::region::RegionInfoList,
10 };
11
12 pub struct DescribeRegionsBuilder<'a> {
13 client: &'a oss::Client<'a>,
14 region: Option<&'a str>,
15 }
16
17 impl<'a> DescribeRegionsBuilder<'a> {
18 pub(crate) fn new(client: &'a oss::Client) -> Self {
19 Self {
20 client,
21 region: None,
22 }
23 }
24
25 pub fn with_region(&mut self, value: &'a str) -> &Self {
26 self.region = Some(value);
27 self
28 }
29
30 pub async fn execute(&self) -> api::ApiResult<RegionInfoList> {
31 let mut url = format!("{}/?regions", self.client.root_url());
32
33 if let Some(region) = self.region {
34 url = format!("{}={}", url, region);
35 }
36
37 let resp = self.client.request.task().with_url(&url).execute().await?;
38
39 Ok(ApiResponseFrom(resp).to_type().await)
40 }
41 }
42}
43
44#[allow(non_snake_case)]
45impl<'a> Client<'a> {
47 pub fn DescribeRegions(&self) -> DescribeRegionsBuilder {
53 DescribeRegionsBuilder::new(self)
54 }
55}