atlassian_cli_auth/
secret.rs1use secrecy::{ExposeSecret, SecretString};
2use std::fmt;
3
4pub struct SecretToken(SecretString);
8
9impl SecretToken {
10 pub fn new(token: String) -> Self {
12 Self(SecretString::from(token))
13 }
14
15 pub fn expose(&self) -> &str {
18 self.0.expose_secret()
19 }
20}
21
22impl fmt::Debug for SecretToken {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 write!(f, "SecretToken([REDACTED])")
25 }
26}
27
28impl Drop for SecretToken {
29 fn drop(&mut self) {
30 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn test_secret_token_creation() {
40 let token = SecretToken::new("my-secret-token".to_string());
41 assert_eq!(token.expose(), "my-secret-token");
42 }
43
44 #[test]
45 fn test_secret_token_debug_redacted() {
46 let token = SecretToken::new("my-secret-token".to_string());
47 let debug_output = format!("{:?}", token);
48 assert_eq!(debug_output, "SecretToken([REDACTED])");
49 assert!(!debug_output.contains("my-secret-token"));
50 }
51
52 #[test]
53 fn test_secret_token_no_clone() {
54 }
60}