opensearch_client/core/get/
get_result.rs1use crate::{common, core::get::GetTypedResult};
12use serde::{de::DeserializeOwned, Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct GetResult {
16 #[serde(rename = "found")]
17 pub found: bool,
18 #[serde(rename = "_seq_no", default, skip_serializing_if = "Option::is_none")]
19 pub seq_no: Option<u32>,
20 #[serde(rename = "_version", default, skip_serializing_if = "Option::is_none")]
21 pub version: Option<u32>,
22 #[serde(rename = "_index")]
23 pub index: String,
24 #[serde(rename = "_source", default, skip_serializing_if = "Option::is_none")]
25 pub source: Option<serde_json::Value>,
26 #[serde(
27 rename = "_primary_term",
28 default,
29 skip_serializing_if = "Option::is_none"
30 )]
31 pub primary_term: Option<f64>,
32 #[serde(rename = "_id")]
33 pub id: String,
34 #[serde(rename = "_routing", default, skip_serializing_if = "Option::is_none")]
35 pub routing: Option<String>,
36 #[serde(rename = "fields", default, skip_serializing_if = "Option::is_none")]
37 pub fields: Option<serde_json::Value>,
38}
39
40impl GetResult {
41 pub fn new(found: bool, index: String, id: String) -> GetResult {
42 GetResult {
43 found,
44 seq_no: None,
45 version: None,
46 index,
47 source: None,
48 primary_term: None,
49 id,
50 routing: None,
51 fields: None,
52 }
53 }
54 pub fn parse<T>(&self) -> Result<GetTypedResult<T>, serde_json::Error>
56 where
57 T: DeserializeOwned,
58 {
59 let value: Option<T> = if let Some(source) = &self.source {
60 serde_json::from_value(source.clone()).ok()
61 } else {
62 None
63 };
64 Ok(GetTypedResult::<T> {
65 source: value,
66 found: self.found,
67 seq_no: self.seq_no,
68 version: self.version,
69 index: self.index.clone(),
70 primary_term: self.primary_term,
71 id: self.id.clone(),
72 routing: self.routing.clone(),
73 fields: self.fields.clone(),
74 })
75 }
76}