rust_persian_tools/url_fix/
mod.rs1use std::string::FromUtf8Error;
2use urlencoding::decode;
3
4pub 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}