aliyun_oss_rs/bucket/
get_bucket_logging.rs

1use crate::common::body_to_bytes;
2use crate::{
3    Error,
4    error::normal_error,
5    request::{Oss, OssRequest},
6};
7use http::Method;
8use serde_derive::Deserialize;
9
10#[derive(Debug, Deserialize)]
11#[serde(rename_all = "PascalCase")]
12pub struct LoggingEnabled {
13    pub target_bucket: String,
14    pub target_prefix: String,
15}
16
17#[derive(Debug, Deserialize)]
18#[serde(rename_all = "PascalCase")]
19struct BucketLoggingStatus {
20    #[serde(rename = "LoggingEnabled")]
21    pub logging_enabled: Option<LoggingEnabled>,
22}
23
24/// Retrieve the bucket logging configuration
25///
26/// See the [Alibaba Cloud documentation](https://help.aliyun.com/zh/oss/developer-reference/getbucketlogging) for details
27pub struct GetBucketLogging {
28    req: OssRequest,
29}
30impl GetBucketLogging {
31    pub(super) fn new(oss: Oss) -> Self {
32        let mut req = OssRequest::new(oss, Method::GET);
33        req.insert_query("logging", "");
34        GetBucketLogging { req }
35    }
36    /// Send the request
37    pub async fn send(self) -> Result<Option<LoggingEnabled>, Error> {
38        let response = self.req.send_to_oss()?.await?;
39        let status_code = response.status();
40        match status_code {
41            code if code.is_success() => {
42                let response_bytes = body_to_bytes(response.into_body())
43                    .await
44                    .map_err(|_| Error::OssInvalidResponse(None))?;
45                let status: BucketLoggingStatus = serde_xml_rs::from_reader(&*response_bytes)
46                    .map_err(|_| Error::OssInvalidResponse(Some(response_bytes)))?;
47                Ok(status.logging_enabled)
48            }
49            _ => Err(normal_error(response).await),
50        }
51    }
52}