use crate::RedactionStrategy;
use std::fmt;
use std::fmt::Debug;
use std::fmt::Display;
mod card;
mod email;
mod first4;
mod fixed;
mod full;
mod ip;
mod last4;
mod password;
mod url;
pub use card::CardRedactor;
pub use email::EmailRedactor;
pub use first4::First4Redactor;
pub use fixed::FixedRedactor;
pub use full::FullRedactor;
pub use ip::IpRedactor;
pub use last4::Last4Redactor;
pub use password::PasswordRedactor;
pub use url::UrlHostRedactor;
pub use url::UrlPasswordRedactor;
#[derive(Default, Clone)]
pub struct NoRedactor;
impl<T: Debug + Display> RedactionStrategy<T> for NoRedactor {
fn debug(&self, value: &T, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Debug::fmt(value, f)
}
fn display(&self, value: &T, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Display::fmt(value, f)
}
}
#[derive(Default, Clone)]
pub struct SimpleRedactor;
impl<T> RedactionStrategy<T> for SimpleRedactor {
fn display(&self, _value: &T, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[REDACTED]")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display() {
let my_secret = "topsecret";
let redacted = crate::Redacted::<_, SimpleRedactor>::new(my_secret);
assert_eq!(redacted.to_string(), "[REDACTED]");
assert_eq!(
format!("Ha! the secret is: {redacted}!"),
"Ha! the secret is: [REDACTED]!"
);
}
#[test]
fn debug() {
let my_secret = "topsecret, even for debug";
let redacted = crate::Redacted::<_, SimpleRedactor>::new(my_secret);
assert_eq!(
format!("Ha! the secret is: {redacted:?}!"),
"Ha! the secret is: [REDACTED]!"
);
}
}