nimiq_jsonrpc_core/
sensitive.rs1use 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}