use crate::{
RedactionPolicy,
domain::RedactSerialize,
};
#[doc(hidden)]
#[must_use = "serialize the adapter to produce redacted output"]
pub struct RedactedSerialize<'a, T: ?Sized> {
value: &'a T,
policy: &'a RedactionPolicy,
}
impl<'a, T: ?Sized> RedactedSerialize<'a, T> {
#[inline(always)]
pub const fn new(value: &'a T, policy: &'a RedactionPolicy) -> Self {
Self { value, policy }
}
}
impl<T: RedactSerialize + ?Sized> serde::Serialize
for RedactedSerialize<'_, T>
{
#[inline(always)]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.value.serialize_redacted(self.policy, serializer)
}
}