elasticsearch_dsl/search/queries/specialized/
percolate_lookup_query.rs1use crate::search::*;
2use crate::util::*;
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
18#[serde(remote = "Self")]
19pub struct PercolateLookupQuery {
20 field: String,
21
22 index: String,
23
24 id: String,
25
26 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
27 routing: Option<String>,
28
29 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
30 preference: Option<String>,
31
32 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
33 version: Option<u64>,
34
35 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
36 name: Option<String>,
37}
38
39impl Query {
40 pub fn percolate_lookup<S, T, U>(field: S, index: T, id: U) -> PercolateLookupQuery
46 where
47 S: ToString,
48 T: ToString,
49 U: ToString,
50 {
51 PercolateLookupQuery {
52 field: field.to_string(),
53 index: index.to_string(),
54 id: id.to_string(),
55 routing: None,
56 preference: None,
57 version: None,
58 name: None,
59 }
60 }
61}
62
63impl PercolateLookupQuery {
64 pub fn routing<S>(mut self, routing: S) -> Self
66 where
67 S: ToString,
68 {
69 self.routing = Some(routing.to_string());
70 self
71 }
72
73 pub fn preference<S>(mut self, preference: S) -> Self
75 where
76 S: ToString,
77 {
78 self.preference = Some(preference.to_string());
79 self
80 }
81
82 pub fn version(mut self, version: u64) -> Self {
84 self.version = Some(version);
85 self
86 }
87
88 pub fn name<S>(mut self, name: S) -> Self
91 where
92 S: ToString,
93 {
94 self.name = Some(name.to_string());
95 self
96 }
97}
98
99impl ShouldSkip for PercolateLookupQuery {}
100
101serialize_with_root!("percolate": PercolateLookupQuery);
102
103#[cfg(test)]
104mod tests {
105 use super::*;
106
107 #[test]
108 fn serialization() {
109 assert_serialize_query(
110 Query::percolate_lookup("field_name", "index_name", "document_id"),
111 json!({
112 "percolate": {
113 "field": "field_name",
114 "index": "index_name",
115 "id": "document_id"
116 }
117 }),
118 );
119
120 assert_serialize_query(
121 Query::percolate_lookup("field_name", "index_name", "document_id")
122 .name("toast")
123 .routing("routing_value")
124 .preference("preference_value")
125 .version(123),
126 json!({
127 "percolate": {
128 "field": "field_name",
129 "name": "toast",
130 "index": "index_name",
131 "id": "document_id",
132 "routing": "routing_value",
133 "preference": "preference_value",
134 "version": 123,
135 }
136 }),
137 );
138 }
139}