Skip to content

Commit 9b7d208

Browse files
committed
Use Either rather than using custom enum type
1 parent a5afb1a commit 9b7d208

File tree

2 files changed

+14
-24
lines changed

2 files changed

+14
-24
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ serde_json = "1.0"
2020
time = { version = "0.3.7", features = ["serde-well-known", "formatting", "parsing"] }
2121
jsonwebtoken = { version = "8", default-features = false }
2222
yaup = "0.2.0"
23+
either = { version = "1.8.0" , features = ["serde"] }
2324

2425
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
2526
futures = "0.3"

src/search.rs

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,27 @@
11
use crate::{errors::Error, indexes::Index};
22
use serde::{de::DeserializeOwned, Deserialize, Serialize, Serializer};
3-
use serde::ser::{SerializeSeq};
43
use serde_json::{Map, Value};
54
use std::collections::HashMap;
5+
use either::Either;
66

77
#[derive(Deserialize, Debug, Eq, PartialEq)]
88
pub struct MatchRange {
99
pub start: usize,
1010
pub length: usize,
1111
}
1212

13-
#[derive(Debug, Eq, PartialEq , Clone)]
14-
pub enum Filter<'a> {
15-
String(&'a str),
16-
Array(Vec<&'a str>)
13+
#[derive(Serialize , Debug, Eq, PartialEq , Clone)]
14+
#[serde(transparent)]
15+
pub struct Filter<'a>{
16+
#[serde(with = "either::serde_untagged")]
17+
inner: Either<&'a str , Vec<&'a str>>
1718
}
1819

19-
impl<'a> Serialize for Filter<'a> {
20-
fn serialize<S>(&self , serializer: S) -> Result<S::Ok , S::Error>
21-
where
22-
S: Serializer
23-
{
24-
match self {
25-
Filter::String(s) => serializer.serialize_str(s),
26-
Filter::Array(s) => {
27-
let mut seq = serializer.serialize_seq(Some(s.len()))?;
28-
29-
for item in s {
30-
seq.serialize_element(item)?;
31-
}
32-
33-
seq.end()
34-
},
35-
}
20+
impl<'a> Filter<'a> {
21+
pub fn new(inner: Either<&'a str , Vec<&'a str>>) -> Filter {
22+
Filter {
23+
inner
24+
}
3625
}
3726
}
3827

@@ -311,11 +300,11 @@ impl<'a> SearchQuery<'a> {
311300
self
312301
}
313302
pub fn with_filter<'b>(&'b mut self, filter: &'a str) -> &'b mut SearchQuery<'a> {
314-
self.filter = Some(Filter::String(filter));
303+
self.filter = Some(Filter::new(Either::Left(filter)));
315304
self
316305
}
317306
pub fn with_array_filter<'b>(&'b mut self , filter: Vec<&'a str>) -> &'b mut SearchQuery<'a> {
318-
self.filter = Some(Filter::Array(filter));
307+
self.filter = Some(Filter::new(Either::Right(filter)));
319308
self
320309
}
321310
pub fn with_facets<'b>(

0 commit comments

Comments
 (0)