use crate::{search::*, util::*};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(remote = "Self")]
pub struct PercolateLookupQuery {
field: String,
index: String,
id: String,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
routing: Option<String>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
preference: Option<String>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
version: Option<u64>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
name: Option<String>,
}
impl Query {
pub fn percolate_lookup<S, T, U>(field: S, index: T, id: U) -> PercolateLookupQuery
where
S: ToString,
T: ToString,
U: ToString,
{
PercolateLookupQuery {
field: field.to_string(),
index: index.to_string(),
id: id.to_string(),
routing: None,
preference: None,
version: None,
name: None,
}
}
}
impl PercolateLookupQuery {
pub fn routing<S>(mut self, routing: S) -> Self
where
S: ToString,
{
self.routing = Some(routing.to_string());
self
}
pub fn preference<S>(mut self, preference: S) -> Self
where
S: ToString,
{
self.preference = Some(preference.to_string());
self
}
pub fn version(mut self, version: u64) -> Self {
self.version = Some(version);
self
}
pub fn name<S>(mut self, name: S) -> Self
where
S: ToString,
{
self.name = Some(name.to_string());
self
}
}
impl ShouldSkip for PercolateLookupQuery {}
serialize_with_root!("percolate": PercolateLookupQuery);
deserialize_with_root!("percolate": PercolateLookupQuery);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn serialization() {
assert_serialize_query(
Query::percolate_lookup("field_name", "index_name", "document_id"),
json!({
"percolate": {
"field": "field_name",
"index": "index_name",
"id": "document_id"
}
}),
);
assert_serialize_query(
Query::percolate_lookup("field_name", "index_name", "document_id")
.name("toast")
.routing("routing_value")
.preference("preference_value")
.version(123),
json!({
"percolate": {
"field": "field_name",
"name": "toast",
"index": "index_name",
"id": "document_id",
"routing": "routing_value",
"preference": "preference_value",
"version": 123,
}
}),
);
}
}