qs_rs/
qs.rs

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}