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