use super::{PercentDecodeError, percent_decode};
pub fn parse_query(query: &str) -> Result<Vec<(String, String)>, PercentDecodeError> {
let query = query.strip_prefix('?').unwrap_or(query);
let mut pairs = Vec::new();
for part in query.split('&').filter(|part| !part.is_empty()) {
let (key, value) = part.split_once('=').unwrap_or((part, ""));
pairs.push((form_decode(key)?, form_decode(value)?));
}
Ok(pairs)
}
fn form_decode(component: &str) -> Result<String, PercentDecodeError> {
percent_decode(&component.replace('+', " ")).map(std::borrow::Cow::into_owned)
}
#[cfg(test)]
#[path = "parse_query.test.rs"]
mod tests;
#[cfg(test)]
#[path = "parse_query.spec.rs"]
mod spec;