use std::collections::BTreeMap;
use std::collections::HashMap;
use std::hash::Hash;
use super::RedactLevelValue;
use super::RedactionFields;
use crate::Sensitivity;
mod private {
pub trait Sealed {}
}
#[doc(hidden)]
pub trait RedactMapKeyValue: private::Sealed {
#[doc(hidden)]
fn write_redacted_map_levels(
&self,
fields: &mut RedactionFields<'_, '_>,
name: &str,
key_level: Sensitivity,
value_level: Option<Sensitivity>,
);
}
impl<K, V> private::Sealed for HashMap<K, V>
where
K: RedactLevelValue + Eq + Hash,
V: RedactLevelValue,
{
}
impl<K, V> RedactMapKeyValue for HashMap<K, V>
where
K: RedactLevelValue + Eq + Hash,
V: RedactLevelValue,
{
fn write_redacted_map_levels(
&self,
fields: &mut RedactionFields<'_, '_>,
name: &str,
key_level: Sensitivity,
value_level: Option<Sensitivity>,
) {
fields.map_key_level_entries(name, self.iter(), key_level, value_level);
}
}
impl<K, V> private::Sealed for BTreeMap<K, V>
where
K: RedactLevelValue + Ord,
V: RedactLevelValue,
{
}
impl<K, V> RedactMapKeyValue for BTreeMap<K, V>
where
K: RedactLevelValue + Ord,
V: RedactLevelValue,
{
fn write_redacted_map_levels(
&self,
fields: &mut RedactionFields<'_, '_>,
name: &str,
key_level: Sensitivity,
value_level: Option<Sensitivity>,
) {
fields.map_key_level_entries(name, self.iter(), key_level, value_level);
}
}