elasticsearch_dsl/search/response/
suggest_option.rs1use crate::{util::ShouldSkip, Map};
2use serde::de::DeserializeOwned;
3
4#[derive(Clone, PartialEq, Serialize, Deserialize)]
6#[serde(untagged)]
7pub enum SuggestOption {
8 Completion(CompletionSuggestOption),
10
11 Term(TermSuggestOption),
13
14 Phrase(PhraseSuggestOption),
16}
17
18impl std::fmt::Debug for SuggestOption {
19 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20 match self {
21 Self::Completion(suggest_option) => suggest_option.fmt(f),
22 Self::Term(suggest_option) => suggest_option.fmt(f),
23 Self::Phrase(suggest_option) => suggest_option.fmt(f),
24 }
25 }
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
30pub struct CompletionSuggestOption {
31 pub text: String,
33
34 #[serde(rename = "_index")]
36 pub index: String,
37
38 #[serde(rename = "_id")]
40 pub id: String,
41
42 #[serde(alias = "_score")]
44 pub score: f32,
45
46 #[serde(
51 skip_serializing_if = "ShouldSkip::should_skip",
52 rename = "_source",
53 default
54 )]
55 pub source: Option<serde_json::Value>,
56
57 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
61 pub contexts: Map<String, Vec<String>>,
62}
63
64impl CompletionSuggestOption {
65 pub fn parse<T>(&self) -> Result<T, serde_json::Error>
67 where
68 T: DeserializeOwned,
69 {
70 serde_json::from_value(self.source.clone().unwrap_or_default())
71 }
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76pub struct TermSuggestOption {
77 pub text: String,
79
80 pub score: f32,
82
83 #[serde(rename = "freq")]
85 pub frequency: u64,
86}
87
88#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
90pub struct PhraseSuggestOption {
91 pub text: String,
93
94 pub score: f32,
96
97 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
99 pub collate_match: Option<bool>,
100
101 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
103 pub highlighted: Option<String>,
104}