xt_oss/oss/api/bucket/
website.rs1use 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#[allow(non_snake_case)]
111impl<'a> oss::Client<'a> {
112 pub fn PutBucketWebsite(&self) -> PutBucketWebsiteBuilder {
118 PutBucketWebsiteBuilder::new(self)
119 }
120
121 pub fn GetBucketWebsite(&self) -> GetBucketWebsiteBuilder {
126 GetBucketWebsiteBuilder::new(self)
127 }
128
129 pub fn DeleteBucketWebsite(&self) -> DeleteBucketWebsiteBuilder {
135 DeleteBucketWebsiteBuilder::new(self)
136 }
137}