use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use zeroize::{Zeroize, ZeroizeOnDrop};
#[derive(Clone, Copy)]
pub(crate) struct Tracked<'a>(pub(crate) &'a AtomicBool);
impl Tracked<'_> {
pub(crate) fn was_zeroized(&self) -> bool {
self.0.load(Ordering::SeqCst)
}
}
impl Zeroize for Tracked<'_> {
fn zeroize(&mut self) {
self.0.store(true, Ordering::SeqCst);
}
}
#[derive(Clone)]
pub(crate) struct Counted<'a>(pub(crate) &'a AtomicUsize);
impl Counted<'_> {
pub(crate) fn wipes(&self) -> usize {
self.0.load(Ordering::SeqCst)
}
}
impl Zeroize for Counted<'_> {
fn zeroize(&mut self) {
self.0.fetch_add(1, Ordering::SeqCst);
}
}
pub(crate) fn assert_zeroize_on_drop<T: ZeroizeOnDrop>() {}