Expand description

QueryMap is a generic wrapper around HashMap<String, Vec<String>> to handle different transformations like URL query strings.

QueryMap can normalize HashMap structures with single value elements into structures with value vector elements.


Create a QueryMap from a HashMap:

use std::collections::HashMap;
use query_map::QueryMap;

let mut data = HashMap::new();
data.insert("foo".into(), vec!["bar".into()]);

let map: QueryMap = QueryMap::from(data);
assert_eq!("bar", map.first("foo").unwrap());
assert_eq!(None, map.first("bar"));

Create a QueryMap from a Serde Value (requires serde feature):

use query_map::QueryMap;
use query_map::serde::standard::*;

struct Test {
    data: QueryMap,

let json = serde_json::json!({
    "data": {
        "foo": "bar"

let test: Test = serde_json::from_value(json).unwrap();
assert_eq!("bar", test.data.first("foo").unwrap());

Create a QueryMap from a query string (requires url-query feature):

use query_map::QueryMap;

let data = "foo=bar&baz=quux&foo=qux";
let map = data.parse::<QueryMap>().unwrap();
let got = map.all("foo").unwrap();
assert_eq!(vec!["bar", "qux"], got);


A read-only view into a map of data which may contain multiple values

A read only reference to the QueryMap’s data