]> Untitled Git - lemmy.git/blob - crates/utils/src/sensitive.rs
Don't drop error context when adding a message to errors (#1958)
[lemmy.git] / crates / utils / src / sensitive.rs
1 use std::{
2   borrow::Borrow,
3   ops::{Deref, DerefMut},
4 };
5
6 #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, serde::Deserialize, serde::Serialize)]
7 #[serde(transparent)]
8 pub struct Sensitive<T>(T);
9
10 impl<T> Sensitive<T> {
11   pub fn new(item: T) -> Self {
12     Sensitive(item)
13   }
14
15   pub fn into_inner(this: Self) -> T {
16     this.0
17   }
18 }
19
20 impl<T> std::fmt::Debug for Sensitive<T> {
21   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22     f.debug_struct("Sensitive").finish()
23   }
24 }
25
26 impl<T> AsRef<T> for Sensitive<T> {
27   fn as_ref(&self) -> &T {
28     &self.0
29   }
30 }
31
32 impl AsRef<str> for Sensitive<String> {
33   fn as_ref(&self) -> &str {
34     &self.0
35   }
36 }
37
38 impl AsRef<[u8]> for Sensitive<String> {
39   fn as_ref(&self) -> &[u8] {
40     self.0.as_ref()
41   }
42 }
43
44 impl AsRef<[u8]> for Sensitive<Vec<u8>> {
45   fn as_ref(&self) -> &[u8] {
46     self.0.as_ref()
47   }
48 }
49
50 impl<T> AsMut<T> for Sensitive<T> {
51   fn as_mut(&mut self) -> &mut T {
52     &mut self.0
53   }
54 }
55
56 impl AsMut<str> for Sensitive<String> {
57   fn as_mut(&mut self) -> &mut str {
58     &mut self.0
59   }
60 }
61
62 impl Deref for Sensitive<String> {
63   type Target = str;
64
65   fn deref(&self) -> &Self::Target {
66     &self.0
67   }
68 }
69
70 impl DerefMut for Sensitive<String> {
71   fn deref_mut(&mut self) -> &mut Self::Target {
72     &mut self.0
73   }
74 }
75
76 impl<T> From<T> for Sensitive<T> {
77   fn from(t: T) -> Self {
78     Sensitive(t)
79   }
80 }
81
82 impl From<&str> for Sensitive<String> {
83   fn from(s: &str) -> Self {
84     Sensitive(s.into())
85   }
86 }
87
88 impl<T> Borrow<T> for Sensitive<T> {
89   fn borrow(&self) -> &T {
90     &self.0
91   }
92 }
93
94 impl Borrow<str> for Sensitive<String> {
95   fn borrow(&self) -> &str {
96     &self.0
97   }
98 }