Skip to main content

opensearch_client/core/get/
get_result.rs

1/*
2 * opensearch-client
3 *
4 * Rust Client for OpenSearch
5 *
6 * The version of the OpenAPI document: 3.1.0
7 * Contact: alberto.paro@gmail.com
8 * Generated by Paro OpenAPI Generator
9 */
10
11use 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    /// Parses document source into a concrete type
55    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}