nimiq_jsonrpc_core/
sensitive.rs

1use std::{
2    fmt,
3    ops::{Deref, DerefMut},
4};
5
6use serde::{
7    de::{Deserialize, Deserializer},
8    ser::{Serialize, Serializer},
9};
10
11#[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
12pub struct Sensitive<T>(pub T);
13
14impl<T> fmt::Debug for Sensitive<T> {
15    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
16        f.pad("***")
17    }
18}
19
20impl<T, U: ?Sized> AsRef<U> for Sensitive<T>
21where
22    T: AsRef<U>,
23{
24    fn as_ref(&self) -> &U {
25        self.0.as_ref()
26    }
27}
28
29impl<T> Deref for Sensitive<T> {
30    type Target = T;
31    fn deref(&self) -> &T {
32        &self.0
33    }
34}
35
36impl<T> DerefMut for Sensitive<T> {
37    fn deref_mut(&mut self) -> &mut T {
38        &mut self.0
39    }
40}
41
42impl<'de, T: Deserialize<'de>> Deserialize<'de> for Sensitive<T> {
43    fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Sensitive<T>, D::Error> {
44        T::deserialize(deserializer).map(Sensitive)
45    }
46}
47
48impl<T: Serialize> Serialize for Sensitive<T> {
49    fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
50        self.0.serialize(serializer)
51    }
52}