rust_persian_tools/url_fix/
mod.rs

1use std::string::FromUtf8Error;
2use urlencoding::decode;
3
4/// description Used for fix Persian characters in URL<br>
5/// separator: space by default
6/// # Example:
7/// ```
8/// use rust_persian_tools::url_fix::url_fix;
9/// assert_eq!(
10///     url_fix("https://fa.wikipedia.org/wiki/%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-botworks.js",None),
11///     Ok("https://fa.wikipedia.org/wiki/مدیاویکی:Gadget-Extra-Editbuttons-botworks.js".to_string())
12/// );
13/// ```
14pub fn url_fix<S>(url: S, separator: Option<S>) -> Result<String, FromUtf8Error>
15where
16    S: AsRef<str>,
17{
18    let url: &str = url.as_ref();
19    let url = decode(url)?;
20
21    if let Some(separator) = separator {
22        let separator: &str = separator.as_ref();
23        return Ok(url.replace(' ', separator));
24    }
25
26    Ok(url.to_string())
27}
28
29#[cfg(test)]
30mod tests {
31
32    use super::*;
33
34    #[test]
35    fn url_fix_test() {
36        assert_eq!(
37            url_fix("https://fa.wikipedia.org/wiki/%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-botworks.js",None),
38            Ok("https://fa.wikipedia.org/wiki/مدیاویکی:Gadget-Extra-Editbuttons-botworks.js".to_string())
39        );
40        assert_eq!(
41            url_fix("https://en.wikipedia.org/wiki/Persian_alphabet", None),
42            Ok("https://en.wikipedia.org/wiki/Persian_alphabet".to_string())
43        );
44        assert_eq!(
45            url_fix(
46                "https://fa.wikipedia.org/wiki/%D8%AF%DB%8C%D8%A7%DA%A9%D9%88",
47                None
48            ),
49            Ok("https://fa.wikipedia.org/wiki/دیاکو".to_string())
50        );
51        assert_eq!(
52            url_fix("https://fa.wikipedia.org/wiki/%D9%85%DA%A9%D8%A7%D9%86%DB%8C%DA%A9%20%DA%A9%D9%88%D8%A7%D9%86%D8%AA%D9%88%D9%85%DB%8C", Some("_")),
53            Ok("https://fa.wikipedia.org/wiki/مکانیک_کوانتومی".to_string())
54        );
55        assert_eq!(
56            url_fix("https://fa.wikipedia.org/wiki/%D9%85%DA%A9%D8%A7%D9%86%DB%8C%DA%A9%20%DA%A9%D9%88%D8%A7%D9%86%D8%AA%D9%88%D9%85%DB%8C", Some("-")),
57            Ok("https://fa.wikipedia.org/wiki/مکانیک-کوانتومی".to_string())
58        );
59        assert_eq!(url_fix("Sample Text", None), Ok("Sample Text".to_string()));
60    }
61}