opensearch_dsl/search/response/
suggest_option.rs1use serde::de::DeserializeOwned;
2
3use crate::{util::ShouldSkip, Map};
4
5#[derive(Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum SuggestOption {
9 Completion(CompletionSuggestOption),
11
12 Term(TermSuggestOption),
14
15 Phrase(PhraseSuggestOption),
17}
18
19impl std::fmt::Debug for SuggestOption {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 match self {
22 Self::Completion(suggest_option) => suggest_option.fmt(f),
23 Self::Term(suggest_option) => suggest_option.fmt(f),
24 Self::Phrase(suggest_option) => suggest_option.fmt(f),
25 }
26 }
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31pub struct CompletionSuggestOption {
32 pub text: String,
34
35 #[serde(rename = "_index")]
37 pub index: String,
38
39 #[serde(rename = "_id")]
41 pub id: String,
42
43 #[serde(alias = "_score")]
45 pub score: f32,
46
47 #[serde(
52 default,
53 skip_serializing_if = "ShouldSkip::should_skip",
54 rename = "_source"
55 )]
56 pub source: Option<serde_json::Value>,
57
58 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
62 pub contexts: Map<String, Vec<String>>,
63}
64
65impl CompletionSuggestOption {
66 pub fn parse<T>(&self) -> Result<T, serde_json::Error>
68 where
69 T: DeserializeOwned,
70 {
71 serde_json::from_value(self.source.clone().unwrap_or_default())
72 }
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77pub struct TermSuggestOption {
78 pub text: String,
80
81 pub score: f32,
83
84 #[serde(rename = "freq")]
86 pub frequency: u64,
87}
88
89#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
91pub struct PhraseSuggestOption {
92 pub text: String,
94
95 pub score: f32,
97
98 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
101 pub collate_match: Option<bool>,
102
103 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
105 pub highlighted: Option<String>,
106}