Skip to main content

ali_oss_rs/blocking/
cname.rs

1use crate::{
2    cname_common::{CnameInfo, ListCnameResult},
3    error::Error,
4    request::{OssRequest, RequestMethod},
5    util::validate_bucket_name,
6    Result,
7};
8
9use super::Client;
10
11pub trait CnameOperations {
12    /// List bucket cname
13    ///
14    /// Official document: <https://help.aliyun.com/zh/oss/developer-reference/listcname>
15    fn list_cname<S>(&self, bucket_name: S) -> Result<Vec<CnameInfo>>
16    where
17        S: AsRef<str>;
18}
19
20impl CnameOperations for Client {
21    // List bucket cname
22    ///
23    /// Official document: <https://help.aliyun.com/zh/oss/developer-reference/listcname>
24    fn list_cname<S>(&self, bucket_name: S) -> Result<Vec<CnameInfo>>
25    where
26        S: AsRef<str>,
27    {
28        let bucket_name = bucket_name.as_ref();
29
30        if !validate_bucket_name(bucket_name) {
31            return Err(Error::Other(format!("invalid bucket name: {}", bucket_name)));
32        }
33
34        let request = OssRequest::new().method(RequestMethod::Get).bucket(bucket_name).add_query("cname", "");
35
36        let (_, xml) = self.do_request::<String>(request)?;
37
38        let ListCnameResult { cnames } = ListCnameResult::from_xml(&xml)?;
39
40        Ok(cnames)
41    }
42}