#![allow(dead_code)]
pub fn parse_query_string(qs: &str) -> std::collections::HashMap<String, String> {
let mut map = std::collections::HashMap::new();
for pair in qs.split('&') {
if let Some((k, v)) = pair.split_once('=') {
map.insert(
urlencoding::decode(k).unwrap_or_default().to_string(),
urlencoding::decode(v).unwrap_or_default().to_string(),
);
}
}
map
}
pub fn build_query_string(params: &std::collections::HashMap<String, String>) -> String {
params
.iter()
.map(|(k, v)| format!("{}={}", urlencoding::encode(k), urlencoding::encode(v)))
.collect::<Vec<_>>()
.join("&")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_query() {
let map = parse_query_string("a=1&b=2");
assert_eq!(map.get("a"), Some(&"1".to_string()));
}
}