use std::{
cell::{Cell, RefCell},
collections::{BTreeMap, BTreeSet, HashMap, HashSet},
rc::Rc,
sync::Arc,
};
#[diagnostic::on_unimplemented(
message = "`{Self}` has no declared redaction behavior",
label = "raw values cannot be certified as redacted output",
note = "derive `Sensitive`, `NotSensitive`, or `NotSensitiveDisplay` on the type",
note = "or wrap the value in `SensitiveValue<T, P>` / `NotSensitiveValue<T>`"
)]
pub trait DeclaredRedactable {}
impl<T: DeclaredRedactable> DeclaredRedactable for Option<T> {}
impl<T: DeclaredRedactable, E: DeclaredRedactable> DeclaredRedactable for Result<T, E> {}
impl<T: DeclaredRedactable> DeclaredRedactable for Vec<T> {}
impl<T: DeclaredRedactable> DeclaredRedactable for Box<T> {}
impl<T: DeclaredRedactable> DeclaredRedactable for Arc<T> {}
impl<T: DeclaredRedactable> DeclaredRedactable for Rc<T> {}
impl<T: DeclaredRedactable> DeclaredRedactable for RefCell<T> {}
impl<T: DeclaredRedactable> DeclaredRedactable for Cell<T> {}
impl<K, V: DeclaredRedactable, S> DeclaredRedactable for HashMap<K, V, S> {}
impl<K, V: DeclaredRedactable> DeclaredRedactable for BTreeMap<K, V> {}
impl<T: DeclaredRedactable, S> DeclaredRedactable for HashSet<T, S> {}
impl<T: DeclaredRedactable> DeclaredRedactable for BTreeSet<T> {}
#[cfg(feature = "json")]
impl DeclaredRedactable for serde_json::Value {}