xt_oss/oss/api/bucket/
acceleration.rs

1use crate::oss;
2
3use self::builders::{GetBucketTransferAccelerationBuilder, PutBucketTransferAccelerationBuilder};
4
5pub mod builders {
6
7    use crate::oss::{
8        self,
9        api::{self, ApiResponseFrom},
10        entities::acceleration::TransferAccelerationConfiguration,
11        http,
12    };
13
14    pub struct PutBucketTransferAccelerationBuilder<'a> {
15        client: &'a oss::Client<'a>,
16        enabled: Option<bool>,
17    }
18
19    impl<'a> PutBucketTransferAccelerationBuilder<'a> {
20        pub(crate) fn new(client: &'a oss::Client, value: bool) -> Self {
21            Self {
22                client,
23                enabled: Some(value),
24            }
25        }
26
27        pub async fn execute(&self) -> api::ApiResult<()> {
28            let res = format!("/{}/?transferAcceleration", self.client.bucket());
29            let url = format!("{}/?transferAcceleration", self.client.base_url());
30
31            let config = TransferAccelerationConfiguration {
32                enabled: self.enabled.unwrap(),
33            };
34            let data = oss::Bytes::from(quick_xml::se::to_string(&config).unwrap());
35            let resp = self
36                .client
37                .request
38                .task()
39                .with_url(&url)
40                .with_resource(&res)
41                .with_method(http::Method::PUT)
42                .with_body(data)
43                .execute_timeout(self.client.timeout())
44                .await?;
45            Ok(ApiResponseFrom(resp).to_empty().await)
46        }
47    }
48
49    //----------------------------------------------
50    pub struct GetBucketTransferAccelerationBuilder<'a> {
51        client: &'a oss::Client<'a>,
52    }
53
54    impl<'a> GetBucketTransferAccelerationBuilder<'a> {
55        pub(crate) fn new(client: &'a oss::Client) -> Self {
56            Self { client }
57        }
58
59        pub async fn execute(&self) -> api::ApiResult<TransferAccelerationConfiguration> {
60            let res = format!("/{}/?transferAcceleration", self.client.bucket());
61            let url = format!("{}/?transferAcceleration", self.client.base_url());
62            let resp = self
63                .client
64                .request
65                .task()
66                .with_url(&url)
67                .with_resource(&res)
68                .execute_timeout(self.client.timeout())
69                .await?;
70
71            Ok(ApiResponseFrom(resp).to_type().await)
72        }
73    }
74}
75
76/// # 传输加速`TransferAcceleration``
77#[allow(non_snake_case)]
78impl<'a> oss::Client<'a> {
79    /// 接口用于为存储空间(Bucket)配置传输加速。开启传输加速后,可提升全球各地用户对OSS的访问速度,
80    /// 适用于远距离数据传输、GB或TB级大文件上传和下载的场景。
81    ///
82    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/putbuckettransferacceleration)
83    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_transfer_acceleration_put.rs)
84    pub fn PutBucketTransferAcceleration(
85        &self,
86        value: bool,
87    ) -> PutBucketTransferAccelerationBuilder<'_> {
88        PutBucketTransferAccelerationBuilder::new(&self, value)
89    }
90
91    /// 接口用于获取目标存储空间(Bucket)的传输加速配置
92    ///
93    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/getbuckettransferacceleration)
94    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_transfer_acceleration_get.rs)
95    pub fn GetBucketTransferAcceleration(&self) -> GetBucketTransferAccelerationBuilder {
96        GetBucketTransferAccelerationBuilder::new(&self)
97    }
98}