use serde::{Deserialize, Serialize}; use std::{ borrow::Borrow, ops::{Deref, DerefMut}, }; #[cfg(feature = "full")] use ts_rs::TS; #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize, Default)] #[serde(transparent)] pub struct Sensitive(T); impl Sensitive { pub fn new(item: T) -> Self { Sensitive(item) } pub fn into_inner(self) -> T { self.0 } } impl std::fmt::Debug for Sensitive { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("Sensitive").finish() } } impl AsRef for Sensitive { fn as_ref(&self) -> &T { &self.0 } } impl AsRef for Sensitive { fn as_ref(&self) -> &str { &self.0 } } impl AsRef<[u8]> for Sensitive { fn as_ref(&self) -> &[u8] { self.0.as_ref() } } impl AsRef<[u8]> for Sensitive> { fn as_ref(&self) -> &[u8] { self.0.as_ref() } } impl AsMut for Sensitive { fn as_mut(&mut self) -> &mut T { &mut self.0 } } impl AsMut for Sensitive { fn as_mut(&mut self) -> &mut str { &mut self.0 } } impl Deref for Sensitive { type Target = str; fn deref(&self) -> &Self::Target { &self.0 } } impl DerefMut for Sensitive { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } } impl From for Sensitive { fn from(t: T) -> Self { Sensitive(t) } } impl From<&str> for Sensitive { fn from(s: &str) -> Self { Sensitive(s.into()) } } impl Borrow for Sensitive { fn borrow(&self) -> &T { &self.0 } } impl Borrow for Sensitive { fn borrow(&self) -> &str { &self.0 } } #[cfg(feature = "full")] impl TS for Sensitive { fn name() -> String { "string".to_string() } fn name_with_type_args(_args: Vec) -> String { "string".to_string() } fn dependencies() -> Vec { Vec::new() } fn transparent() -> bool { true } }