pub fn url_encode(input: &str) -> String {
urlencoding::encode(input).into_owned()
}
pub fn url_decode(input: &str) -> String {
urlencoding::decode(input)
.map(|cow| cow.into_owned())
.unwrap_or_else(|_| input.to_string())
}
pub fn get_url_arg(url_params: &str, param_name: &str) -> String {
let pattern = format!("{}=", param_name);
let mut pos = url_params.len();
while pos > 0 {
if let Some(found_pos) = url_params[..pos].rfind(&pattern) {
if found_pos == 0
|| url_params.as_bytes()[found_pos - 1] == b'&'
|| url_params.as_bytes()[found_pos - 1] == b'?'
{
let start = found_pos + pattern.len();
let end = match url_params[start..].find('&') {
Some(ampersand_pos) => start + ampersand_pos,
None => url_params.len(),
};
return url_params[start..end].to_string();
}
pos = found_pos;
} else {
break;
}
if pos == 0 {
break;
}
pos -= 1;
}
String::new()
}