opensearch-client 0.3.1

Strongly typed OpenSearch Client
Documentation
/*
 * opensearch-client
 *
 * Rust Client for OpenSearch
 *
 * The version of the OpenAPI document: 3.1.0
 * Contact: alberto.paro@gmail.com
 * Generated by Paro OpenAPI Generator
 */

use crate::{common, core::get::GetTypedResult};
use serde::{de::DeserializeOwned, Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct GetResult {
    #[serde(rename = "found")]
    pub found: bool,
    #[serde(rename = "_seq_no", default, skip_serializing_if = "Option::is_none")]
    pub seq_no: Option<u32>,
    #[serde(rename = "_version", default, skip_serializing_if = "Option::is_none")]
    pub version: Option<u32>,
    #[serde(rename = "_index")]
    pub index: String,
    #[serde(rename = "_source", default, skip_serializing_if = "Option::is_none")]
    pub source: Option<serde_json::Value>,
    #[serde(
        rename = "_primary_term",
        default,
        skip_serializing_if = "Option::is_none"
    )]
    pub primary_term: Option<f64>,
    #[serde(rename = "_id")]
    pub id: String,
    #[serde(rename = "_routing", default, skip_serializing_if = "Option::is_none")]
    pub routing: Option<String>,
    #[serde(rename = "fields", default, skip_serializing_if = "Option::is_none")]
    pub fields: Option<serde_json::Value>,
}

impl GetResult {
    pub fn new(found: bool, index: String, id: String) -> GetResult {
        GetResult {
            found,
            seq_no: None,
            version: None,
            index,
            source: None,
            primary_term: None,
            id,
            routing: None,
            fields: None,
        }
    }
    /// Parses document source into a concrete type
    pub fn parse<T>(&self) -> Result<GetTypedResult<T>, serde_json::Error>
    where
        T: DeserializeOwned,
    {
        let value: Option<T> = if let Some(source) = &self.source {
            serde_json::from_value(source.clone()).ok()
        } else {
            None
        };
        Ok(GetTypedResult::<T> {
            source: value,
            found: self.found,
            seq_no: self.seq_no,
            version: self.version,
            index: self.index.clone(),
            primary_term: self.primary_term,
            id: self.id.clone(),
            routing: self.routing.clone(),
            fields: self.fields.clone(),
        })
    }
}