ciboulette/query/
typed_param.rs

1use super::*;
2
3/// Extract the type of query param
4///
5/// i.e. `[public__peoples]` => `public__peoples`
6pub fn parse_typed_query_param(s: &str) -> Option<Cow<'_, str>> {
7    if s.len() <= 2 || !(s.starts_with('[') && s.ends_with(']')) {
8        return None;
9    }
10    Some(Cow::Borrowed(&s[1..s.len() - 1]))
11}
12
13#[cfg(test)]
14mod tests_param {
15    use super::*;
16
17    #[test]
18    fn ok_simple() {
19        let input = "[toto]";
20        let res = parse_typed_query_param(&input);
21        assert_eq!(
22            res.is_some(),
23            true,
24            "should have parsed the sparse field param"
25        );
26        let res = res.unwrap();
27        assert_eq!(res, "toto", "type mismatch");
28    }
29
30    #[test]
31    fn no_match() {
32        let input = "AAAAAAAAAA";
33        let res = parse_typed_query_param(&input);
34        assert_eq!(
35            res.is_none(),
36            true,
37            "shouldn't have parsed the sparse field param"
38        );
39    }
40
41    #[test]
42    fn no_type() {
43        let input = "[]";
44        let res = parse_typed_query_param(&input);
45        assert_eq!(
46            res.is_none(),
47            true,
48            "shouldn't have parsed the sparse field param"
49        );
50    }
51
52    #[test]
53    fn nested_type_1() {
54        let input = "[toto.tutu]";
55        let res = parse_typed_query_param(&input);
56        assert_eq!(
57            res.is_some(),
58            true,
59            "should have parsed the sparse field param"
60        );
61        let res = res.unwrap();
62        assert_eq!(res, "toto.tutu", "type mismatch");
63    }
64
65    #[test]
66    fn nested_type_n() {
67        let input = "[toto.tutu.toto.tata]";
68        let res = parse_typed_query_param(&input);
69        assert_eq!(
70            res.is_some(),
71            true,
72            "should have parsed the sparse field param"
73        );
74        let res = res.unwrap();
75        assert_eq!(res, "toto.tutu.toto.tata", "type mismatch");
76    }
77}