xt_oss/oss/api/bucket/
cname.rs1use crate::oss;
2use builders::{CreateCnameTokenBuilder, GetCnameTokenBuilder, ListCnameBuilder, PutCnameBuilder};
3
4use self::builders::DeleteCnameBuilder;
5
6pub mod builders {
7 use crate::oss::{
8 self,
9 api::{self, ApiResponseFrom},
10 entities::cname::{
11 builders::BucketCnameConfigurationBuilder, BucketCnameConfiguration, Cname, CnameToken,
12 ListCnameResult,
13 },
14 http,
15 };
16
17 pub struct CreateCnameTokenBuilder<'a> {
18 client: &'a oss::Client<'a>,
19 cname: &'a str,
20 }
21
22 impl<'a> CreateCnameTokenBuilder<'a> {
23 pub fn new(client: &'a oss::Client, cname: &'a str) -> Self {
24 Self { client, cname }
25 }
26
27 fn config(&self) -> String {
28 let config = BucketCnameConfiguration {
29 cname: Cname {
30 domain: self.cname.to_string(),
31 ..Cname::default()
32 },
33 };
34 quick_xml::se::to_string(&config).unwrap()
35 }
36
37 pub async fn execute(&self) -> api::ApiResult<CnameToken> {
38 let res = format!("/{}/?cname&comp=token", self.client.bucket());
39 let url = format!("{}/?cname&comp=token", &self.client.base_url());
40
41 let data = oss::Bytes::from(self.config());
42
43 let resp = self
44 .client
45 .request
46 .task()
47 .with_url(&url)
48 .with_method(http::Method::POST)
49 .with_resource(&res)
50 .with_body(data)
51 .execute_timeout(self.client.timeout())
52 .await?;
53
54 Ok(ApiResponseFrom(resp).to_type().await)
55 }
56 }
57
58 pub struct GetCnameTokenBuilder<'a> {
59 client: &'a oss::Client<'a>,
60 cname: &'a str,
61 }
62
63 impl<'a> GetCnameTokenBuilder<'a> {
64 pub(crate) fn new(client: &'a oss::Client, cname: &'a str) -> Self {
65 Self { client, cname }
66 }
67
68 pub async fn execute(&self) -> api::ApiResult<CnameToken> {
69 let res = format!("/{}/?cname={}&comp=token", self.client.bucket(), self.cname);
70 let url = format!(
71 "{}/?cname={}&comp=token",
72 self.client.base_url(),
73 self.cname
74 );
75
76 let resp = self
77 .client
78 .request
79 .task()
80 .with_url(&url)
81 .with_resource(&res)
82 .execute_timeout(self.client.timeout())
83 .await?;
84
85 Ok(ApiResponseFrom(resp).to_type().await)
86 }
87 }
88
89 pub struct PutCnameBuilder<'a> {
90 client: &'a oss::Client<'a>,
91 bucket_cname_configuration: BucketCnameConfiguration,
92 }
93
94 impl<'a> PutCnameBuilder<'a> {
95 pub(crate) fn new(client: &'a oss::Client) -> Self {
96 Self {
97 client,
98 bucket_cname_configuration: BucketCnameConfiguration::default(),
99 }
100 }
101
102 pub fn with_config(mut self, value: BucketCnameConfiguration) -> Self {
103 self.bucket_cname_configuration = value;
104 self
105 }
106
107 fn config(&self) -> String {
108 quick_xml::se::to_string(&self.bucket_cname_configuration).unwrap()
109 }
110
111 pub async fn execute(&self) -> api::ApiResult {
112 let res = format!("/{}/?cname&comp=add", self.client.bucket());
113 let url = format!("{}/?cname&comp=add", self.client.base_url());
114
115 let data = oss::Bytes::from(self.config());
116
117 let resp = self
118 .client
119 .request
120 .task()
121 .with_url(&url)
122 .with_method(http::Method::POST)
123 .with_body(data)
124 .with_resource(&res)
125 .execute_timeout(self.client.timeout())
126 .await?;
127
128 Ok(ApiResponseFrom(resp).to_empty().await)
129 }
130 }
131
132 pub struct ListCnameBuilder<'a> {
133 client: &'a oss::Client<'a>,
134 }
135
136 impl<'a> ListCnameBuilder<'a> {
137 pub(crate) fn new(client: &'a oss::Client) -> Self {
138 Self { client }
139 }
140
141 pub async fn execute(&self) -> api::ApiResult<ListCnameResult> {
142 let res = format!("/{}/?{}", self.client.bucket(), "cname");
143 let url = format!("{}/?{}", self.client.base_url(), "cname");
144
145 let resp = self
146 .client
147 .request
148 .task()
149 .with_url(&url)
150 .with_resource(&res)
151 .execute_timeout(self.client.timeout())
152 .await?;
153
154 Ok(ApiResponseFrom(resp).to_type().await)
155 }
156 }
157
158 pub struct DeleteCnameBuilder<'a> {
159 client: &'a oss::Client<'a>,
160 cname: &'a str,
161 }
162
163 impl<'a> DeleteCnameBuilder<'a> {
164 pub(crate) fn new(client: &'a oss::Client, cname: &'a str) -> Self {
165 Self { client, cname }
166 }
167
168 fn config(&self) -> String {
169 let config = BucketCnameConfigurationBuilder::new()
170 .with_domain(self.cname)
171 .build();
172 quick_xml::se::to_string(&config).unwrap()
173 }
174
175 pub async fn execute(&self) -> api::ApiResult {
176 let res = format!("/{}/?cname&comp=delete", self.client.bucket());
177 let url = format!("{}/?cname&comp=delete", self.client.base_url());
178
179 let data = oss::Bytes::from(self.config());
180
181 let resp = self
182 .client
183 .request
184 .task()
185 .with_url(&url)
186 .with_resource(&res)
187 .with_method(http::Method::POST)
188 .with_body(data)
189 .execute_timeout(self.client.timeout())
190 .await?;
191
192 Ok(ApiResponseFrom(resp).to_empty().await)
193 }
194 }
195}
196
197#[allow(non_snake_case)]
199impl<'a> oss::Client<'a> {
200 pub fn CreateCnameToken(&self, cname: &'a str) -> CreateCnameTokenBuilder<'_> {
205 CreateCnameTokenBuilder::new(self, cname)
206 }
207
208 pub fn GetCnameToken(&self, cname: &'a str) -> GetCnameTokenBuilder<'_> {
213 GetCnameTokenBuilder::new(self, cname)
214 }
215
216 pub fn PutCname(&self) -> PutCnameBuilder<'_> {
221 PutCnameBuilder::new(self)
222 }
223
224 pub fn ListCname(&self) -> ListCnameBuilder<'_> {
229 ListCnameBuilder::new(self)
230 }
231
232 pub fn DeleteCname(&self, cname: &'a str) -> DeleteCnameBuilder<'_> {
237 DeleteCnameBuilder::new(self, cname)
238 }
239}