tencentcloud_sms/
credential.rs1use secrecy::SecretString;
2
3#[derive(Clone)]
4pub enum Credential {
5 LongTerm {
6 secret_id: String,
7 secret_key: SecretString,
8 },
9 Temporary {
10 secret_id: String,
11 secret_key: SecretString,
12 token: SecretString,
13 },
14}
15
16impl std::fmt::Debug for Credential {
18 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19 match self {
20 Self::LongTerm { secret_id, .. } => f
21 .debug_struct("Credential::LongTerm")
22 .field("secret_id", &secret_id)
23 .field("secret_key", &"***")
24 .finish(),
25 Self::Temporary { secret_id, .. } => f
26 .debug_struct("Credential::Temporary")
27 .field("secret_id", &secret_id)
28 .field("secret_key", &"***")
29 .field("token", &"***")
30 .finish(),
31 }
32 }
33}
34
35impl Credential {
36 pub fn long_term(secret_id: impl Into<String>, secret_key: impl Into<String>) -> Self {
42 Self::LongTerm {
43 secret_id: secret_id.into(),
44 secret_key: SecretString::new(secret_key.into().into_boxed_str()),
45 }
46 }
47
48 pub fn temporary(
55 secret_id: impl Into<String>,
56 secret_key: impl Into<String>,
57 token: impl Into<String>,
58 ) -> Self {
59 Self::Temporary {
60 secret_id: secret_id.into(),
61 secret_key: SecretString::new(secret_key.into().into_boxed_str()),
62 token: SecretString::new(token.into().into_boxed_str()),
63 }
64 }
65
66 pub fn secret_id(&self) -> &str {
68 match self {
69 Self::LongTerm { secret_id, .. } => secret_id,
70 Self::Temporary { secret_id, .. } => secret_id,
71 }
72 }
73
74 pub fn secret_key(&self) -> &SecretString {
79 match self {
80 Self::LongTerm { secret_key, .. } => secret_key,
81 Self::Temporary { secret_key, .. } => secret_key,
82 }
83 }
84
85 pub fn token(&self) -> Option<&SecretString> {
90 match self {
91 Self::LongTerm { .. } => None,
92 Self::Temporary { token, .. } => Some(token),
93 }
94 }
95}