ddapi_rs/util/
encoding.rs1use std::borrow::Cow;
2use std::fmt::Write;
3
4const SLUGIFY_SYMBOLS: &str = "\t !\"#$%&'()*-/<=>?@[\\]^_`{|},.:+";
5
6pub fn slugify2(nickname: &str) -> Cow<'_, str> {
7 if !nickname
8 .chars()
9 .any(|c| SLUGIFY_SYMBOLS.contains(c) || c.is_ascii())
10 {
11 return Cow::Borrowed(nickname);
12 }
13
14 let mut result = String::with_capacity(nickname.len() * 4);
15
16 for c in nickname.chars() {
17 if SLUGIFY_SYMBOLS.contains(c) || !c.is_ascii() {
18 write!(&mut result, "-{}-", c as u32).unwrap();
19 } else {
20 result.push(c);
21 }
22 }
23
24 Cow::Owned(result)
25}
26
27pub fn encode(nickname: &str) -> Cow<'_, str> {
28 if nickname
29 .chars()
30 .all(|c| c.is_ascii() && !c.is_ascii_control())
31 {
32 Cow::Borrowed(nickname)
33 } else {
34 urlencoding::encode(nickname)
35 }
36}