1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//! Credentials and CredentialsProvider definitions.
//!
//! 在构建client的时候需要传入实现了CredentialsProvider trait的类型,因为trait `CredentialsProvider`的load方法是异步的,
//! 所以有些像预签名等api本身是同步的,但是需要用到Credentials的时候,可能需要异步获取Credentials,所以这类操作因此也变为异步的。
//!
//! # Example
//!
//! ```no_run
//! use serde::Deserialize;
//! use std::sync::Arc;
//! use u_sdk::credentials::{Credentials, CredentialsProvider};
//! use u_sdk::oss;
//!
//! #[derive(Deserialize, Debug)]
//! pub struct OssConfig {
//! pub access_key_id: String,
//! pub access_key_secret: String,
//! pub endpoint: String,
//! pub bucket_name: String,
//! pub region: String,
//! }
//!
//! pub struct OssCredsProvider {
//! creds: Arc<Credentials>,
//! }
//!
//! impl OssCredsProvider {
//! pub fn new(access_key_id: String, access_key_secret: String) -> Self {
//! Self {
//! creds: Credentials::new(access_key_id, access_key_secret, None, None).into(),
//! }
//! }
//! }
//!
//! #[async_trait::async_trait]
//! impl CredentialsProvider for OssCredsProvider {
//! async fn load(
//! &self,
//! ) -> Result<Arc<Credentials>, Box<dyn std::error::Error + Send + Sync + 'static>> {
//! Ok(Arc::clone(&self.creds))
//! }
//! }
//!
//! fn get_oss_client() -> oss::Client {
//! let file_str = std::fs::read_to_string("tests/oss/config.toml").unwrap();
//! let conf = toml::from_str::<OssConfig>(&file_str).unwrap();
//! let creds_provider = Arc::new(OssCredsProvider::new(
//! conf.access_key_id,
//! conf.access_key_secret,
//! ));
//! oss::Client::builder()
//! .credentials_provider(creds_provider)
//! .endpoint(conf.endpoint)
//! .region(conf.region)
//! .bucket(conf.bucket_name)
//! .build()
//! }
//! ```
use Arc;
use OffsetDateTime;