elastic_query_builder/query/
range_query.rs1use 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}