elastic_query_builder/query/
range_query.rs

1use crate::query::QueryTrait;
2use serde::ser::SerializeStruct;
3use serde::{Serialize, Serializer};
4use serde_json::{json, Value};
5
6#[derive(Default)]
7pub struct RangeQuery {
8    field: String,
9    lt: String,
10    gt: String,
11    lte: String,
12    gte: String,
13}
14
15impl RangeQuery {
16    pub fn new(field: &str) -> RangeQuery {
17        let mut v = RangeQuery::default();
18        v.field = field.to_string();
19        return v;
20    }
21    pub fn gt(mut self, value: String) -> RangeQuery {
22        self.gt = value;
23        return self;
24    }
25    pub fn lt(mut self, value: String) -> RangeQuery {
26        self.lt = value;
27        return self;
28    }
29    pub fn gte(mut self, value: String) -> RangeQuery {
30        self.gte = value;
31        return self;
32    }
33    pub fn lte(mut self, value: String) -> RangeQuery {
34        self.lte = value;
35        return self;
36    }
37}
38
39impl Serialize for RangeQuery {
40    fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
41    where
42        S: Serializer,
43    {
44        let mut state = serializer.serialize_struct("RangeQuery", 0)?;
45        if !self.gt.is_empty() {
46            let _ = state.serialize_field("gt", &self.gt);
47        }
48        if !self.lt.is_empty() {
49            let _ = state.serialize_field("lt", &self.lt);
50        }
51        if !self.gte.is_empty() {
52            let _ = state.serialize_field("gte", &self.gte);
53        }
54        if !self.lte.is_empty() {
55            let _ = state.serialize_field("lte", &self.lte);
56        }
57        state.end()
58    }
59}
60
61impl QueryTrait for RangeQuery {
62    fn build(&self) -> Value {
63        let name = self.query_name();
64        let field = self.field.to_string();
65        json!({
66            name: {
67                field:self
68            }
69        })
70    }
71    fn query_name(&self) -> String {
72        return "range".to_string();
73    }
74}