ciboulette/query/
typed_param.rs1use super::*;
2
3pub 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}