elastic_query_builder/query/
terms_query.rs

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