opensearch_dsl/search/queries/
query_collection.rs1use super::Query;
2use crate::util::ShouldSkip;
3
4#[derive(Default, Clone, PartialEq, Deserialize, Serialize)]
6pub struct QueryCollection(Vec<Query>);
7
8impl std::fmt::Debug for QueryCollection {
9 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10 self.0.fmt(f)
11 }
12}
13
14impl IntoIterator for QueryCollection {
15 type IntoIter = std::vec::IntoIter<Self::Item>;
16 type Item = Query;
17
18 fn into_iter(self) -> Self::IntoIter {
19 self.0.into_iter()
20 }
21}
22
23impl ShouldSkip for QueryCollection {
24 fn should_skip(&self) -> bool {
25 self.0.should_skip()
26 }
27}
28
29impl QueryCollection {
30 pub fn extend<T>(&mut self, query: T)
32 where
33 T: IntoIterator,
34 T::Item: Into<Query>,
35 {
36 self.0.extend(
37 query
38 .into_iter()
39 .map(Into::into)
40 .filter(ShouldSkip::should_keep),
41 )
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn adds_query() {
51 let mut queries = QueryCollection::default();
52
53 let query = Query::terms("test", [1]);
54
55 queries.extend(query);
56
57 assert_eq!(queries.0.len(), 1);
58 }
59
60 #[test]
61 fn adds_queries() {
62 let mut queries = QueryCollection::default();
63
64 let query_1 = Query::terms("test", [1]);
65 let query_2 = Query::terms("test", [2]);
66
67 queries.extend([query_1, query_2]);
68
69 assert_eq!(queries.0.len(), 2);
70 }
71
72 #[test]
73 fn skips_queries() {
74 let mut queries = QueryCollection::default();
75
76 let empty_values: [i32; 0] = [];
77
78 let query_1 = Query::terms("test", empty_values).into();
79 let query_2 = Query::from(Query::terms("test", empty_values));
80 let query_3 = Query::Terms(Query::terms("test", empty_values));
81
82 queries.extend([query_1, query_2, query_3]);
83
84 assert!(queries.0.is_empty());
85 }
86
87 #[test]
88 fn skips_query() {
89 let mut queries = QueryCollection::default();
90
91 let empty_values: [i32; 0] = [];
92
93 let query = Query::terms("test", empty_values);
94
95 queries.extend(query);
96
97 assert!(queries.0.is_empty());
98 }
99}