aliyun_oss_rs/client/
oss_client.rs

1#[cfg(feature = "async")]
2use super::{DescribeRegions, ListBuckets};
3use crate::{OssBucket, oss::Oss};
4
5/// Entry point for OSS, implementing APIs to query available regions and list buckets
6#[derive(Debug, Clone)]
7pub struct OssClient {
8    pub(crate) oss: Oss,
9}
10
11impl OssClient {
12    /// Initialize an OssClient for subsequent use
13    ///
14    /// - ak_id: Alibaba Cloud AccessKey ID
15    /// - ak_secret: Alibaba Cloud AccessKey Secret
16    ///
17    pub fn new(ak_id: &str, ak_secret: &str) -> Self {
18        OssClient {
19            oss: Oss::new(ak_id, ak_secret),
20        }
21    }
22    /// Disable HTTPS
23    pub fn disable_https(mut self) -> Self {
24        self.oss.set_https(false);
25        self
26    }
27    /// Attach a temporary security token for STS authentication
28    pub fn with_security_token(mut self, token: impl Into<String>) -> Self {
29        self.oss.set_security_token(token);
30        self
31    }
32    /// Update the security token in place for reuse
33    pub fn set_security_token(&mut self, token: impl Into<String>) {
34        self.oss.set_security_token(token);
35    }
36    /// Initialize an OssBucket
37    pub fn bucket(&self, bucket: &str, endpoint: &str) -> OssBucket {
38        OssBucket::new(self.oss.clone(), bucket, endpoint)
39    }
40    /// Query the endpoint information of all regions
41    #[cfg(feature = "async")]
42    pub fn describe_regions(&self) -> DescribeRegions {
43        DescribeRegions::new(self.oss.clone())
44    }
45    /// List all created buckets
46    #[cfg(feature = "async")]
47    pub fn list_buckets(&self) -> ListBuckets {
48        ListBuckets::new(self.oss.clone())
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn test_client_basic() {
58        let client = OssClient::new("id", "secret");
59        assert_eq!(client.oss.ak_id, "id");
60        let client = client.clone().disable_https();
61        assert!(!client.oss.enable_https);
62        let client = client.clone().with_security_token("token");
63        assert_eq!(client.oss.security_token.as_deref(), Some("token"));
64        let mut client_mut = client.clone();
65        client_mut.set_security_token("token2");
66        assert_eq!(client_mut.oss.security_token.as_deref(), Some("token2"));
67        let bucket = client.bucket("bucket", "endpoint");
68        assert_eq!(bucket.oss.bucket.as_deref(), Some("bucket"));
69        assert_eq!(bucket.oss.endpoint.as_ref(), "endpoint");
70        assert_eq!(bucket.oss.security_token.as_deref(), Some("token"));
71    }
72}