xt_oss/oss/api/bucket/
payment.rs

1pub mod builders {
2    use oss::http;
3
4    use crate::oss::{
5        self,
6        api::{self, ApiResponseFrom},
7        entities::payment::{Payer, RequestPaymentConfiguration},
8    };
9    pub struct PutBucketRequestPaymentBuilder<'a> {
10        client: &'a oss::Client<'a>,
11        config: RequestPaymentConfiguration,
12    }
13
14    impl<'a> PutBucketRequestPaymentBuilder<'a> {
15        pub(crate) fn new(client: &'a oss::Client, payer: Payer) -> Self {
16            Self {
17                client,
18                config: RequestPaymentConfiguration { payer },
19            }
20        }
21
22        fn config(&self) -> String {
23            quick_xml::se::to_string(&self.config).unwrap()
24        }
25
26        pub async fn execute(&self) -> api::ApiResult {
27            let res = format!("/{}/?requestPayment", self.client.bucket());
28            let url = format!("{}?requestPayment", self.client.base_url());
29            let content = oss::Bytes::from(self.config());
30            let resp = self
31                .client
32                .request
33                .task()
34                .with_url(&url)
35                .with_method(http::Method::PUT)
36                .with_body(content)
37                .with_resource(&res)
38                .execute_timeout(self.client.timeout())
39                .await?;
40
41            Ok(ApiResponseFrom(resp).to_empty().await)
42        }
43    }
44
45    pub struct GetBucketRequestPaymentBuilder<'a> {
46        client: &'a oss::Client<'a>,
47    }
48
49    impl<'a> GetBucketRequestPaymentBuilder<'a> {
50        pub(crate) fn new(client: &'a oss::Client) -> Self {
51            Self { client }
52        }
53
54        pub async fn execute(&self) -> api::ApiResult<RequestPaymentConfiguration> {
55            let res = format!("/{}/?requestPayment", self.client.bucket());
56            let url = format!("{}/?requestPayment", self.client.base_url());
57
58            let resp = self
59                .client
60                .request
61                .task()
62                .with_url(&url)
63                .with_resource(&res)
64                .execute_timeout(self.client.timeout())
65                .await?;
66
67            Ok(ApiResponseFrom(resp).to_type().await)
68        }
69    }
70}
71
72use crate::oss::{self, entities::payment::Payer};
73
74use self::builders::{GetBucketRequestPaymentBuilder, PutBucketRequestPaymentBuilder};
75/// # 请求者付费`RequestPayment`
76#[allow(non_snake_case)]
77impl<'a> oss::Client<'a> {
78    /// PutBucketRequestPayment接口用于设置请求者付费模式。
79    ///
80    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/putbucketrequestpayment)
81    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_payment_put.rs)
82    pub fn PutBucketRequestPayment(&self, payer: Payer) -> PutBucketRequestPaymentBuilder {
83        PutBucketRequestPaymentBuilder::new(self, payer)
84    }
85
86    /// GetBucketRequestPayment接口用于获取请求者付费模式配置信息。
87    ///
88    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/getbucketrequestpayment)
89    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_payment_get.rs)
90    pub fn GetBucketRequestPayment(&self) -> GetBucketRequestPaymentBuilder {
91        GetBucketRequestPaymentBuilder::new(&self)
92    }
93}