pub trait LogSafe {}
#[derive(serde::Serialize)]
pub struct AssertLogSafe<T>(pub T);
impl<T> LogSafe for AssertLogSafe<T> {}
#[cfg(feature = "log-safety")]
pub trait MaybeLogSafe: LogSafe {}
#[cfg(feature = "log-safety")]
impl<T: LogSafe> MaybeLogSafe for T {}
#[cfg(not(feature = "log-safety"))]
pub trait MaybeLogSafe {}
#[cfg(not(feature = "log-safety"))]
impl<T> MaybeLogSafe for T {}
impl LogSafe for crate::Uuid {}
impl<T: LogSafe + ?Sized> LogSafe for &T {}
impl<T: LogSafe + ?Sized> LogSafe for &mut T {}
impl<T: LogSafe + ?Sized> LogSafe for Box<T> {}
impl<T: LogSafe + ?Sized> LogSafe for std::rc::Rc<T> {}
impl<T: LogSafe + ?Sized> LogSafe for std::sync::Arc<T> {}
impl<T: LogSafe> LogSafe for Option<T> {}
impl<T: LogSafe> LogSafe for Vec<T> {}
impl<T: LogSafe> LogSafe for std::collections::VecDeque<T> {}
impl<T: LogSafe> LogSafe for std::collections::LinkedList<T> {}
impl<T: LogSafe> LogSafe for [T] {}
impl<T: LogSafe, const N: usize> LogSafe for [T; N] {}
impl<K: LogSafe, V: LogSafe> LogSafe for std::collections::BTreeMap<K, V> {}
impl<K: LogSafe, V: LogSafe, S> LogSafe for std::collections::HashMap<K, V, S> {}
impl<T: LogSafe> LogSafe for std::collections::BTreeSet<T> {}
impl<T: LogSafe, S> LogSafe for std::collections::HashSet<T, S> {}
impl<T: LogSafe> LogSafe for std::collections::BinaryHeap<T> {}
pub mod derive {
pub use conjure_macros::LogSafe;
}