use super::redact_level_serialize::RedactLevelSerialize;
use super::redact_serialize_scope::RedactSerializeScope;
#[doc(hidden)]
pub struct RedactedLevelSerializeRef<'value, 'policy, T: ?Sized> {
value: &'value T,
policy: &'policy crate::RedactionPolicy,
level: crate::Sensitivity,
}
impl<'value, 'policy, T: ?Sized> RedactedLevelSerializeRef<'value, 'policy, T> {
#[must_use]
pub fn new(value: &'value T, policy: &'policy crate::RedactionPolicy, level: crate::Sensitivity) -> Self {
Self { value, policy, level }
}
}
impl<T: ?Sized + RedactLevelSerialize> serde::Serialize for RedactedLevelSerializeRef<'_, '_, T> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let _scope = RedactSerializeScope::new(self.policy);
self.value.serialize_redacted_level(serializer, self.policy, self.level)
}
}