use core::fmt::{Formatter, Result};
use crate::RedactionEngine;
pub trait RedactedDebug {
fn fmt(&self, engine: &RedactionEngine, f: &mut Formatter) -> Result;
}
pub trait RedactedDisplay {
fn fmt(&self, engine: &RedactionEngine, f: &mut Formatter) -> Result;
}
pub trait RedactedToString {
fn to_redacted_string(&self, engine: &RedactionEngine) -> String;
}
impl<T: RedactedDisplay + ?Sized> RedactedToString for T {
fn to_redacted_string(&self, engine: &RedactionEngine) -> String {
struct Adapter<'a, T: ?Sized> {
inner: &'a T,
engine: &'a RedactionEngine,
}
impl<T: RedactedDisplay + ?Sized> std::fmt::Display for Adapter<'_, T> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
<T as RedactedDisplay>::fmt(self.inner, self.engine, f)
}
}
Adapter { inner: self, engine }.to_string()
}
}