sqlpage/webserver/
request_variables.rs1use std::collections::{hash_map::Entry, HashMap};
2
3use super::http::SingleOrVec;
4
5pub type ParamMap = HashMap<String, SingleOrVec>;
6
7pub fn param_map<PAIRS: IntoIterator<Item = (String, String)>>(values: PAIRS) -> ParamMap {
8 values
9 .into_iter()
10 .fold(HashMap::new(), |mut map, (mut k, v)| {
11 let entry = if k.ends_with("[]") {
12 k.replace_range(k.len() - 2.., "");
13 SingleOrVec::Vec(vec![v])
14 } else {
15 SingleOrVec::Single(v)
16 };
17 match map.entry(k) {
18 Entry::Occupied(mut s) => {
19 SingleOrVec::merge(s.get_mut(), entry);
20 }
21 Entry::Vacant(v) => {
22 v.insert(entry);
23 }
24 }
25 map
26 })
27}