use secrecy::{ExposeSecret, SecretString};
use std::fmt;
pub struct SecretToken(SecretString);
impl SecretToken {
pub fn new(token: String) -> Self {
Self(SecretString::from(token))
}
pub fn expose(&self) -> &str {
self.0.expose_secret()
}
}
impl fmt::Debug for SecretToken {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "SecretToken([REDACTED])")
}
}
impl Drop for SecretToken {
fn drop(&mut self) {
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_secret_token_creation() {
let token = SecretToken::new("my-secret-token".to_string());
assert_eq!(token.expose(), "my-secret-token");
}
#[test]
fn test_secret_token_debug_redacted() {
let token = SecretToken::new("my-secret-token".to_string());
let debug_output = format!("{:?}", token);
assert_eq!(debug_output, "SecretToken([REDACTED])");
assert!(!debug_output.contains("my-secret-token"));
}
#[test]
fn test_secret_token_no_clone() {
}
}