xt_oss/oss/api/
region.rs

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)]
45/// 关于Service操作
46impl<'a> Client<'a> {
47    /// 调用DescribeRegions接口查询所有支持地域或者指定地域对应的Endpoint信息,
48    /// 包括外网Endpoint、内网Endpoint和传输加速Endpoint。
49    ///
50    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/describeregions)
51    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_describe_regions.rs)
52    pub fn DescribeRegions(&self) -> DescribeRegionsBuilder {
53        DescribeRegionsBuilder::new(self)
54    }
55}