use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Clone, Default, Deserialize)]
#[serde(transparent)]
pub struct Secret<T>(T);
impl<T> Secret<T> {
pub fn new(value: T) -> Self {
Self(value)
}
#[inline]
pub fn expose_secret(&self) -> &T {
&self.0
}
#[inline]
pub fn expose_owned_secret(self) -> T {
self.0
}
#[inline]
pub fn into_secret<U>(self) -> Secret<U>
where
T: Into<U>,
{
Secret(self.0.into())
}
}
impl<T> fmt::Debug for Secret<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[REDACTED]")
}
}
impl<T> Serialize for Secret<T> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str("[REDACTED]")
}
}