elasticsearch_dsl/search/highlight/
boundary_scanner.rs1use serde::ser::{Serialize, SerializeStruct, Serializer};
2
3#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
6pub enum UnifiedBoundaryScanner {
7 Sentence(Option<String>),
16
17 Word(Option<String>),
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
26pub enum FvhBoundaryScanner {
27 Chars,
30
31 Sentence(Option<String>),
35
36 Word(Option<String>),
40}
41
42impl Serialize for UnifiedBoundaryScanner {
43 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
44 where
45 S: Serializer,
46 {
47 match self {
48 Self::Sentence(locale) => match locale {
49 Some(locale) => {
50 let mut map =
51 serializer.serialize_struct("UnifiedBoundaryScannerSentence2", 2)?;
52 map.serialize_field("boundary_scanner", "sentence")?;
53 map.serialize_field("boundary_scanner_locale", locale)?;
54 map.end()
55 }
56 None => {
57 let mut map =
58 serializer.serialize_struct("UnifiedBoundaryScannerSentence1", 1)?;
59 map.serialize_field("boundary_scanner", "sentence")?;
60 map.end()
61 }
62 },
63 Self::Word(locale) => match locale {
64 Some(locale) => {
65 let mut map = serializer.serialize_struct("UnifiedBoundaryScannerWord2", 2)?;
66 map.serialize_field("boundary_scanner", "word")?;
67 map.serialize_field("boundary_scanner_locale", locale)?;
68 map.end()
69 }
70 None => {
71 let mut map = serializer.serialize_struct("UnifiedBoundaryScannerWord1", 1)?;
72 map.serialize_field("boundary_scanner", "word")?;
73 map.end()
74 }
75 },
76 }
77 }
78}
79
80impl Serialize for FvhBoundaryScanner {
81 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
82 where
83 S: Serializer,
84 {
85 match self {
86 Self::Chars => {
87 let mut map = serializer.serialize_struct("FvhBoundaryScannerChars", 1)?;
88 map.serialize_field("boundary_scanner", "chars")?;
89 map.end()
90 }
91 Self::Sentence(locale) => match locale {
92 Some(locale) => {
93 let mut map = serializer.serialize_struct("FvhBoundaryScannerSentence2", 2)?;
94 map.serialize_field("boundary_scanner", "sentence")?;
95 map.serialize_field("boundary_scanner_locale", locale)?;
96 map.end()
97 }
98 None => {
99 let mut map = serializer.serialize_struct("FvhBoundaryScannerSentence1", 1)?;
100 map.serialize_field("boundary_scanner", "sentence")?;
101 map.end()
102 }
103 },
104 Self::Word(locale) => match locale {
105 Some(locale) => {
106 let mut map = serializer.serialize_struct("FvhBoundaryScannerWord2", 2)?;
107 map.serialize_field("boundary_scanner", "word")?;
108 map.serialize_field("boundary_scanner_locale", locale)?;
109 map.end()
110 }
111 None => {
112 let mut map = serializer.serialize_struct("FvhBoundaryScannerWord1", 1)?;
113 map.serialize_field("boundary_scanner", "word")?;
114 map.end()
115 }
116 },
117 }
118 }
119}
120
121#[cfg(test)]
122mod tests {
123 use super::*;
124 use crate::util::*;
125
126 #[test]
127 fn serialization() {
128 assert_serialize(
129 UnifiedBoundaryScanner::Sentence(None),
130 json!({ "boundary_scanner": "sentence" }),
131 );
132
133 assert_serialize(
134 UnifiedBoundaryScanner::Sentence(Some("en-US".into())),
135 json!({ "boundary_scanner": "sentence", "boundary_scanner_locale": "en-US" }),
136 );
137
138 assert_serialize(
139 UnifiedBoundaryScanner::Word(None),
140 json!({ "boundary_scanner": "word" }),
141 );
142
143 assert_serialize(
144 UnifiedBoundaryScanner::Word(Some("en-US".into())),
145 json!({ "boundary_scanner": "word", "boundary_scanner_locale": "en-US" }),
146 );
147
148 assert_serialize(
149 FvhBoundaryScanner::Chars,
150 json!({ "boundary_scanner": "chars" }),
151 );
152
153 assert_serialize(
154 FvhBoundaryScanner::Sentence(None),
155 json!({ "boundary_scanner": "sentence" }),
156 );
157
158 assert_serialize(
159 FvhBoundaryScanner::Sentence(Some("en-US".into())),
160 json!({ "boundary_scanner": "sentence", "boundary_scanner_locale": "en-US" }),
161 );
162
163 assert_serialize(
164 FvhBoundaryScanner::Word(None),
165 json!({ "boundary_scanner": "word" }),
166 );
167
168 assert_serialize(
169 FvhBoundaryScanner::Word(Some("en-US".into())),
170 json!({ "boundary_scanner": "word", "boundary_scanner_locale": "en-US" }),
171 );
172 }
173}