use std::fmt;
use std::ops::Deref;
use std::pin::Pin;
use zeroize::{Zeroize, Zeroizing};
pub struct Sensitive<T: Zeroize>(Pin<Box<Zeroizing<T>>>);
impl<T> Sensitive<T>
where
T: Zeroize,
{
pub fn new(inner: T) -> Self {
let inner = Zeroizing::new(inner);
let inner = Box::pin(inner);
Self(inner)
}
}
impl<T> fmt::Debug for Sensitive<T>
where
T: Zeroize,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Sensitive").finish_non_exhaustive()
}
}
impl<T> Deref for Sensitive<T>
where
T: Deref + Zeroize,
{
type Target = T;
fn deref(&self) -> &Self::Target {
self.0.deref()
}
}