text_utils/utils/urls/
mod.rs1use percent_encoding::{percent_decode, percent_encode, AsciiSet, CONTROLS};
2
3const NON_URL: &AsciiSet = &CONTROLS
4 .add(b' ')
5 .add(b'!')
6 .add(b'"')
7 .add(b'#')
8 .add(b'$')
9 .add(b'%')
10 .add(b'&')
11 .add(b'\'')
12 .add(b'(')
13 .add(b')')
14 .add(b'*')
15 .add(b'+')
16 .add(b',')
17 .add(b'-')
18 .add(b';')
20 .add(b'<')
21 .add(b'=')
22 .add(b'>')
23 .add(b'@')
25 .add(b'[')
26 .add(b'\\')
27 .add(b']')
28 .add(b'^')
29 .add(b'_')
30 .add(b'`')
31 .add(b'{')
32 .add(b'|')
33 .add(b'}')
34 .add(b'~');
35
36pub fn url_encode(text: impl AsRef<str>) -> String {
38 percent_encode(text.as_ref().as_bytes(), NON_URL).to_string()
39}
40
41pub fn url_decode(text: impl AsRef<str>) -> Option<String> {
43 match percent_decode(text.as_ref().as_bytes()).decode_utf8() {
44 Ok(cow) => Some(cow.to_string()),
45 Err(_) => None,
46 }
47}
48