]> Untitled Git - lemmy.git/blob - crates/api_common/src/sensitive.rs
Sanitize html (#3708)
[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 #[cfg(feature = "full")]
7 use ts_rs::TS;
8
9 #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize, Default)]
10 #[serde(transparent)]
11 pub struct Sensitive<T>(T);
12
13 impl<T> Sensitive<T> {
14   pub fn new(item: T) -> Self {
15     Sensitive(item)
16   }
17   pub fn into_inner(self) -> T {
18     self.0
19   }
20 }
21
22 impl<T> std::fmt::Debug for Sensitive<T> {
23   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24     f.debug_struct("Sensitive").finish()
25   }
26 }
27
28 impl<T> AsRef<T> for Sensitive<T> {
29   fn as_ref(&self) -> &T {
30     &self.0
31   }
32 }
33
34 impl AsRef<str> for Sensitive<String> {
35   fn as_ref(&self) -> &str {
36     &self.0
37   }
38 }
39
40 impl AsRef<[u8]> for Sensitive<String> {
41   fn as_ref(&self) -> &[u8] {
42     self.0.as_ref()
43   }
44 }
45
46 impl AsRef<[u8]> for Sensitive<Vec<u8>> {
47   fn as_ref(&self) -> &[u8] {
48     self.0.as_ref()
49   }
50 }
51
52 impl<T> AsMut<T> for Sensitive<T> {
53   fn as_mut(&mut self) -> &mut T {
54     &mut self.0
55   }
56 }
57
58 impl AsMut<str> for Sensitive<String> {
59   fn as_mut(&mut self) -> &mut str {
60     &mut self.0
61   }
62 }
63
64 impl Deref for Sensitive<String> {
65   type Target = str;
66
67   fn deref(&self) -> &Self::Target {
68     &self.0
69   }
70 }
71
72 impl DerefMut for Sensitive<String> {
73   fn deref_mut(&mut self) -> &mut Self::Target {
74     &mut self.0
75   }
76 }
77
78 impl<T> From<T> for Sensitive<T> {
79   fn from(t: T) -> Self {
80     Sensitive(t)
81   }
82 }
83
84 impl From<&str> for Sensitive<String> {
85   fn from(s: &str) -> Self {
86     Sensitive(s.into())
87   }
88 }
89
90 impl<T> Borrow<T> for Sensitive<T> {
91   fn borrow(&self) -> &T {
92     &self.0
93   }
94 }
95
96 impl Borrow<str> for Sensitive<String> {
97   fn borrow(&self) -> &str {
98     &self.0
99   }
100 }
101
102 #[cfg(feature = "full")]
103 impl TS for Sensitive<String> {
104   fn name() -> String {
105     "string".to_string()
106   }
107   fn name_with_type_args(_args: Vec<String>) -> String {
108     "string".to_string()
109   }
110   fn dependencies() -> Vec<ts_rs::Dependency> {
111     Vec::new()
112   }
113   fn transparent() -> bool {
114     true
115   }
116 }