ddapi_rs/util/
encoding.rs

1use 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}