1
2pub trait UrlEncoding {
3 fn url_encode(&self) -> String;
4}
5
6pub trait QueryString {
7 fn to_qs(&self, k: &str) -> String;
8}
9impl UrlEncoding for i8 {
10 fn url_encode(&self) -> String {
11 self.to_string()
12 }
13}
14
15impl QueryString for i8 {
16 fn to_qs(&self, k: &str) -> String {
17 format!("{}={}", k, self)
18 }
19}
20impl UrlEncoding for i16 {
21 fn url_encode(&self) -> String {
22 self.to_string()
23 }
24}
25
26impl QueryString for i16 {
27 fn to_qs(&self, k: &str) -> String {
28 format!("{}={}", k, self)
29 }
30}
31
32impl UrlEncoding for i32 {
33 fn url_encode(&self) -> String {
34 self.to_string()
35 }
36}
37
38impl QueryString for i32 {
39 fn to_qs(&self, k: &str) -> String {
40 format!("{}={}", k, self)
41 }
42}
43impl UrlEncoding for i64 {
44 fn url_encode(&self) -> String {
45 self.to_string()
46 }
47}
48
49impl QueryString for i64 {
50 fn to_qs(&self, k: &str) -> String {
51 format!("{}={}", k, self)
52 }
53}
54impl UrlEncoding for u8 {
55 fn url_encode(&self) -> String {
56 self.to_string()
57 }
58}
59
60impl QueryString for u8 {
61 fn to_qs(&self, k: &str) -> String {
62 format!("{}={}", k, self)
63 }
64}
65impl UrlEncoding for u16 {
66 fn url_encode(&self) -> String {
67 self.to_string()
68 }
69}
70
71impl QueryString for u16 {
72 fn to_qs(&self, k: &str) -> String {
73 format!("{}={}", k, self)
74 }
75}
76
77impl UrlEncoding for u32 {
78 fn url_encode(&self) -> String {
79 self.to_string()
80 }
81}
82
83impl QueryString for u32 {
84 fn to_qs(&self, k: &str) -> String {
85 format!("{}={}", k, self)
86 }
87}
88impl UrlEncoding for u64 {
89 fn url_encode(&self) -> String {
90 self.to_string()
91 }
92}
93
94impl QueryString for u64 {
95 fn to_qs(&self, k: &str) -> String {
96 format!("{}={}", k, self)
97 }
98}
99impl UrlEncoding for u128 {
100 fn url_encode(&self) -> String {
101 self.to_string()
102 }
103}
104
105impl QueryString for u128 {
106 fn to_qs(&self, k: &str) -> String {
107 format!("{}={}", k, self)
108 }
109}
110impl UrlEncoding for f32 {
111 fn url_encode(&self) -> String {
112 self.to_string()
113 }
114}
115
116impl QueryString for f32 {
117 fn to_qs(&self, k: &str) -> String {
118 format!("{}={}", k, self)
119 }
120}
121impl UrlEncoding for f64 {
122 fn url_encode(&self) -> String {
123 self.to_string()
124 }
125}
126
127impl QueryString for f64 {
128 fn to_qs(&self, k: &str) -> String {
129 format!("{}={}", k, self)
130 }
131}
132impl UrlEncoding for isize {
133 fn url_encode(&self) -> String {
134 self.to_string()
135 }
136}
137
138impl QueryString for isize {
139 fn to_qs(&self, k: &str) -> String {
140 format!("{}={}", k, self)
141 }
142}
143impl UrlEncoding for bool {
144 fn url_encode(&self) -> String {
145 self.to_string()
146 }
147}
148
149impl QueryString for bool {
150 fn to_qs(&self, k: &str) -> String {
151 format!("{}={}", k, self)
152 }
153}
154impl UrlEncoding for usize {
155 fn url_encode(&self) -> String {
156 self.to_string()
157 }
158}
159
160impl QueryString for usize {
161 fn to_qs(&self, k: &str) -> String {
162 format!("{}={}", k, self)
163 }
164}
165impl UrlEncoding for &str {
166 fn url_encode(&self) -> String {
167 urlencoding::encode(self).to_string()
168 }
169}
170
171impl QueryString for &str {
172 fn to_qs(&self, k: &str) -> String {
173 format!("{}={}", k, self.url_encode())
174 }
175}
176
177impl UrlEncoding for String {
178 fn url_encode(&self) -> String {
179 urlencoding::encode(self.as_str()).to_string()
180 }
181}
182
183impl QueryString for String {
184 fn to_qs(&self, k: &str) -> String {
185 format!("{}={}", k, self.url_encode())
186 }
187}
188
189impl<T: UrlEncoding> QueryString for Vec<T> {
190 fn to_qs(&self, k: &str) -> String {
191 self.into_iter().map(|it| format!("{}[]={}", k, it.url_encode())).collect::<Vec<String>>().join("&")
192 }
193}
194
195impl<T: QueryString> QueryString for Option<T> {
196 fn to_qs(&self, k: &str) -> String {
197 match self {
198 Some(ref v) => v.to_qs(k),
199 None => format!("{}=", k),
200 }
201 }
202}