xt_oss/oss/api/bucket/
website.rs

1use crate::oss;
2
3use self::builders::{
4    DeleteBucketWebsiteBuilder, GetBucketWebsiteBuilder, PutBucketWebsiteBuilder,
5};
6
7pub mod builders {
8    use crate::oss::{
9        self,
10        api::{self, ApiResponseFrom},
11        entities::website::WebsiteConfiguration,
12        http,
13    };
14
15    pub struct PutBucketWebsiteBuilder<'a> {
16        client: &'a oss::Client<'a>,
17        config: WebsiteConfiguration,
18    }
19
20    impl<'a> PutBucketWebsiteBuilder<'a> {
21        pub(crate) fn new(client: &'a oss::Client) -> Self {
22            Self {
23                client,
24                config: WebsiteConfiguration::default(),
25            }
26        }
27
28        pub fn with_config(mut self, config: WebsiteConfiguration) -> Self {
29            self.config = config;
30            self
31        }
32
33        pub fn config(&self) -> String {
34            quick_xml::se::to_string(&self.config).unwrap()
35        }
36
37        pub async fn execute(&self) -> api::ApiResult<()> {
38            let res = format!("/{}/?{}", self.client.bucket(), "website");
39            let url = format!("{}/?{}", self.client.base_url(), "website");
40
41            let config = self.config();
42            let data = oss::Bytes::from(config);
43
44            let resp = self
45                .client
46                .request
47                .task()
48                .with_url(&url)
49                .with_method(http::Method::PUT)
50                .with_resource(&res)
51                .with_body(data)
52                .execute()
53                .await?;
54
55            Ok(ApiResponseFrom(resp).to_empty().await)
56        }
57    }
58
59    pub struct GetBucketWebsiteBuilder<'a> {
60        client: &'a oss::Client<'a>,
61    }
62
63    impl<'a> GetBucketWebsiteBuilder<'a> {
64        pub(crate) fn new(client: &'a oss::Client) -> Self {
65            Self { client }
66        }
67
68        pub async fn execute(&self) -> api::ApiResult<WebsiteConfiguration> {
69            let res = format!("/{}/?{}", self.client.bucket(), "website");
70            let url = format!("{}/?{}", self.client.base_url(), "website");
71            let resp = self
72                .client
73                .request
74                .task()
75                .with_url(&url)
76                .with_resource(&res)
77                .execute()
78                .await?;
79            Ok(ApiResponseFrom(resp).to_type().await)
80        }
81    }
82
83    pub struct DeleteBucketWebsiteBuilder<'a> {
84        client: &'a oss::Client<'a>,
85    }
86
87    impl<'a> DeleteBucketWebsiteBuilder<'a> {
88        pub(crate) fn new(client: &'a oss::Client) -> Self {
89            Self { client }
90        }
91
92        pub async fn execute(&self) -> api::ApiResult {
93            let res = format!("/{}/?{}", self.client.bucket(), "website");
94            let url = format!("{}/?{}", self.client.base_url(), "website");
95            let resp = self
96                .client
97                .request
98                .task()
99                .with_url(&url)
100                .with_method(http::Method::DELETE)
101                .with_resource(&res)
102                .execute()
103                .await?;
104            Ok(ApiResponseFrom(resp).to_empty().await)
105        }
106    }
107}
108
109/// # 静态网站`Website``
110#[allow(non_snake_case)]
111impl<'a> oss::Client<'a> {
112    /// 调用PutBucketWebsite接口将存储空间`Bucket`设置为静态网站托管模式并设置跳
113    /// 转规则`RoutingRule`。
114    ///
115    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/putbucketwebsite)
116    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_website_put.rs)
117    pub fn PutBucketWebsite(&self) -> PutBucketWebsiteBuilder {
118        PutBucketWebsiteBuilder::new(self)
119    }
120
121    /// 调用GetBucketWebsite接口查看存储空间`Bucket`的静态网站托管状态以及跳转规则
122    ///
123    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/getbucketwebsite)
124    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_website_get.rs)
125    pub fn GetBucketWebsite(&self) -> GetBucketWebsiteBuilder {
126        GetBucketWebsiteBuilder::new(self)
127    }
128
129    /// DeleteBucketWebsite接口用于关闭存储空间`Bucket`的静态网站托管模式以及
130    /// 跳转规则。只有Bucket的拥有者才能关闭Bucket的静态网站托管模式。
131    ///
132    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/deletebucketwebsite)
133    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_website_del.rs)
134    pub fn DeleteBucketWebsite(&self) -> DeleteBucketWebsiteBuilder {
135        DeleteBucketWebsiteBuilder::new(self)
136    }
137}