elastic_query_builder/query/
terms_query.rs1use crate::query::QueryTrait;
2use crate::util::UtilMap;
3use serde_json::{json, Value};
4
5#[derive(Default)]
6pub struct TermsQuery {
7 field: String,
8 values: Vec<String>,
9}
10
11impl TermsQuery {
12 pub fn new(field: &str, values: Vec<String>) -> TermsQuery {
13 let mut query = TermsQuery::default();
14 query.field = field.to_string();
15 query.values = values;
16 return query;
17 }
18}
19
20impl QueryTrait for TermsQuery {
21 fn build(&self) -> Value {
22 let mut map = UtilMap::new();
23 map.append_vec_string(self.field.as_str(), self.values.clone());
24 map.build_object(self.query_name())
25 }
26
27 fn query_name(&self) -> String {
28 return "terms".to_string();
29 }
30}
31
32mod tests {
33 use super::*;
34 #[test]
35 fn test() {
36 let terms = TermsQuery::new("f", vec!["value1".to_string(), "value2".to_string()]);
37 let json = terms.build();
38 assert_eq!(
39 "{\"terms\":{\"f\":[\"value1\",\"value2\"]}}",
40 json.to_string()
41 );
42 }
43}