os_query_builder_rs/full_text/intervals/
interval.rs

1use serde::{
2    Serialize,
3    Serializer,
4    ser::SerializeMap
5};
6use crate::full_text::intervals::interval_rule::IntervalRule;
7
8#[derive(Debug, Default, Clone)]
9pub struct Intervals {
10    field: Option<String>,
11    value: Option<IntervalRule>
12}
13
14impl Serialize for Intervals {
15    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
16        where
17            S: Serializer,
18    {
19        let mut state = serializer.serialize_map(Some(1))?;
20        state.serialize_entry(&self.field.as_deref().unwrap_or_default(), &self.value)?;
21        state.end()
22    }
23}
24
25
26impl Intervals {
27
28    pub fn new() -> Self {
29        Self::default()
30    }
31
32    pub fn field<T: Into<String> + Serialize>(self, field: T) -> Self {
33        Self {
34            field: Some(field.into()),
35            ..self
36        }
37    }
38
39    pub fn intervals<T: Into<IntervalRule> + Serialize>(self, interval: T) -> Self {
40        Self {
41            value: Some(interval.into()),
42            ..self
43        }
44    }
45}