rusty_oss/actions/
delete_bucket.rs1use std::time::Duration;
2
3use time::OffsetDateTime;
4use url::Url;
5
6use crate::actions::Method;
7use crate::actions::OSSAction;
8use crate::signing::sign;
9use crate::{Bucket, Credentials, Map};
10
11#[derive(Debug, Clone)]
19pub struct DeleteBucket<'a> {
20 bucket: &'a Bucket,
21 credentials: &'a Credentials,
22
23 query: Map<'a>,
24 headers: Map<'a>,
25}
26
27impl<'a> DeleteBucket<'a> {
28 pub fn new(bucket: &'a Bucket, credentials: &'a Credentials) -> Self {
29 Self {
30 bucket,
31 credentials,
32
33 query: Map::new(),
34 headers: Map::new(),
35 }
36 }
37}
38
39impl<'a> OSSAction<'a> for DeleteBucket<'a> {
40 const METHOD: Method = Method::Delete;
41
42 fn query_mut(&mut self) -> &mut Map<'a> {
43 &mut self.query
44 }
45
46 fn headers_mut(&mut self) -> &mut Map<'a> {
47 &mut self.headers
48 }
49
50 fn sign_with_time(&self, expires_in: Duration, time: &OffsetDateTime) -> Url {
51 let url = self.bucket.base_url().clone();
52
53 sign(
54 time,
55 Method::Delete,
56 url,
57 self.credentials.key(),
58 self.credentials.secret(),
59 self.credentials.token(),
60 self.bucket.region(),
61 expires_in.as_secs(),
62 self.query.iter(),
63 self.headers.iter(),
64 )
65 }
66}
67
68#[cfg(test)]
69mod tests {
70 use time::OffsetDateTime;
71
72 use pretty_assertions::assert_eq;
73
74 use super::*;
75 use crate::{Bucket, Credentials, UrlStyle};
76
77 #[test]
78 fn oss_example() {
79 let date = OffsetDateTime::from_unix_timestamp(1369353600).unwrap();
81 let expires_in = Duration::from_secs(86400);
82
83 let endpoint = "https://oss-cn-hangzhou.aliyuncs.com".parse().unwrap();
84 let bucket = Bucket::new(
85 endpoint,
86 UrlStyle::VirtualHost,
87 "examplebucket",
88 "cn-hangzhou",
89 )
90 .unwrap();
91 let credentials = Credentials::new(
92 "access_key_id",
93 "access_key_secret",
94 );
95
96 let action = DeleteBucket::new(&bucket, &credentials);
97
98 let url = action.sign_with_time(expires_in, &date);
99 let expected = "https://examplebucket.oss-cn-hangzhou.aliyuncs.com/?x-oss-additional-headers=host&x-oss-credential=access_key_id%2F20130524%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-date=20130524T000000Z&x-oss-expires=86400&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-signature=7153b50de7f71dd86c75648cccc084a3b2761559431b26414b035e3a478084eb";
100
101 assert_eq!(expected, url.as_str());
102 }
103}