os_query_builder_rs/term/
regexp.rs1use serde::{
2 Serialize,
3 Serializer,
4 ser::SerializeMap
5};
6use crate::misc::{
7 rewrite::Rewrite,
8 regexp_flag::RegexpFlag
9};
10
11#[derive(Debug, Default, Clone)]
12pub struct Regexp {
13 field: Option<String>,
14 value: RegexpValue
15}
16
17#[derive(Debug, Default, Clone, Serialize)]
18struct RegexpValue {
19 value: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 boost: Option<f64>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 case_insensitive: Option<bool>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 flags: Option<RegexpFlag>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 max_determinized_states: Option<u64>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 rewrite: Option<Rewrite>
30}
31
32impl Serialize for Regexp {
33 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
34 where
35 S: Serializer,
36 {
37 let mut state = serializer.serialize_map(Some(1))?;
38 state.serialize_entry(&self.field.as_deref().unwrap_or_default(), &self.value)?;
39 state.end()
40 }
41}
42
43
44impl Regexp {
45 pub fn new() -> Self {
46 Self::default()
47 }
48
49 pub fn field<T:Into<String>+Serialize>(self, field: T) -> Self {
50 Self {
51 field: Some(field.into()),
52 ..self
53 }
54 }
55
56 pub fn value<T:Into<String>+Serialize>(self, value: T) -> Self {
57 Self {
58 value: RegexpValue {
59 value: value.into(),
60 ..self.value
61 },
62 ..self
63 }
64 }
65
66 pub fn boost<T:Into<f64>+Serialize>(self, boost: T) -> Self {
67 Self {
68 value: RegexpValue {
69 boost: Some(boost.into()),
70 ..self.value
71 },
72 ..self
73 }
74 }
75
76 pub fn case_insensitive<T:Into<bool>+Serialize>(self, case_insensitive: T) -> Self {
77 Self {
78 value: RegexpValue {
79 case_insensitive: Some(case_insensitive.into()),
80 ..self.value
81 },
82 ..self
83 }
84 }
85
86 pub fn max_determinized_states<T:Into<u64>+Serialize>(self, max_determinized_states: T) -> Self {
87 Self {
88 value: RegexpValue {
89 max_determinized_states: Some(max_determinized_states.into()),
90 ..self.value
91 },
92 ..self
93 }
94 }
95
96 pub fn rewrite<T:Into<Rewrite>+Serialize>(self, rewrite: T) -> Self {
97 Self {
98 value: RegexpValue {
99 rewrite: Some(rewrite.into()),
100 ..self.value
101 },
102 ..self
103 }
104 }
105
106 pub fn flags<T:Into<RegexpFlag>+Serialize>(self, flags: T) -> Self {
107 Self {
108 value: RegexpValue {
109 flags: Some(flags.into()),
110 ..self.value
111 },
112 ..self
113 }
114 }
115}