sqlpage/webserver/
request_variables.rs

1use 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}