openapi-to-rust 0.16.0

Generate typed Rust models, HTTP/SSE clients, and Axum servers from OpenAPI 3.0/3.1 (experimental 3.2)
Documentation
---
source: src/test_helpers.rs
expression: "&generated_code"
---
//! Generated types from OpenAPI specification
//!
//! This file contains all the generated types for the API.
//! Do not edit manually - regenerate using the appropriate script.
#![allow(clippy::large_enum_variant)]
#![allow(clippy::format_in_format_args)]
#![allow(clippy::let_unit_value)]
#![allow(unreachable_patterns)]
use serde::{Deserialize, Serialize};
pub type ToolList = Vec<Tool>;
#[derive(Debug, Clone)]
pub enum Tool {
    FunctionTool(FunctionTool),
    RetrievalTool(RetrievalTool),
}
impl serde::Serialize for Tool {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        match self {
            Self::FunctionTool(payload) => {
                let mut value = serde_json::to_value(payload)
                    .map_err(serde::ser::Error::custom)?;
                let object = value
                    .as_object_mut()
                    .ok_or_else(|| {
                        serde::ser::Error::custom(
                            concat!(
                                "discriminated union variant `", stringify!(FunctionTool),
                                "` did not serialize as an object",
                            ),
                        )
                    })?;
                match object.get("type") {
                    Some(
                        serde_json::Value::String(tag),
                    ) if matches!(tag.as_str(), "function") => {}
                    Some(serde_json::Value::String(tag)) => {
                        return Err(
                            serde::ser::Error::custom(
                                format!(
                                    "discriminator `{}` value `{tag}` is not valid for variant `{}`",
                                    "type", stringify!(FunctionTool),
                                ),
                            ),
                        );
                    }
                    Some(_) => {
                        return Err(
                            serde::ser::Error::custom(
                                concat!(
                                    "discriminator `", "type",
                                    "` did not serialize as a string",
                                ),
                            ),
                        );
                    }
                    None => {
                        object
                            .insert(
                                "type".to_string(),
                                serde_json::Value::String("function".to_string()),
                            );
                    }
                }
                value.serialize(serializer)
            }
            Self::RetrievalTool(payload) => {
                let mut value = serde_json::to_value(payload)
                    .map_err(serde::ser::Error::custom)?;
                let object = value
                    .as_object_mut()
                    .ok_or_else(|| {
                        serde::ser::Error::custom(
                            concat!(
                                "discriminated union variant `", stringify!(RetrievalTool),
                                "` did not serialize as an object",
                            ),
                        )
                    })?;
                match object.get("type") {
                    Some(
                        serde_json::Value::String(tag),
                    ) if matches!(tag.as_str(), "retrieval") => {}
                    Some(serde_json::Value::String(tag)) => {
                        return Err(
                            serde::ser::Error::custom(
                                format!(
                                    "discriminator `{}` value `{tag}` is not valid for variant `{}`",
                                    "type", stringify!(RetrievalTool),
                                ),
                            ),
                        );
                    }
                    Some(_) => {
                        return Err(
                            serde::ser::Error::custom(
                                concat!(
                                    "discriminator `", "type",
                                    "` did not serialize as a string",
                                ),
                            ),
                        );
                    }
                    None => {
                        object
                            .insert(
                                "type".to_string(),
                                serde_json::Value::String("retrieval".to_string()),
                            );
                    }
                }
                value.serialize(serializer)
            }
        }
    }
}
impl<'de> serde::Deserialize<'de> for Tool {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: serde::Deserializer<'de>,
    {
        let value = serde_json::Value::deserialize(deserializer)?;
        let discriminator = match value.get("type") {
            Some(serde_json::Value::String(discriminator)) => {
                Some(discriminator.as_str())
            }
            Some(_) => {
                return Err(
                    serde::de::Error::custom(
                        concat!("non-string discriminator `", "type", "`",),
                    ),
                );
            }
            None => None,
        };
        match discriminator {
            Some(discriminator) => {
                match discriminator {
                    "function" => {
                        let primary_error = match serde_json::from_value::<
                            FunctionTool,
                        >(value.clone()) {
                            Ok(payload) => return Ok(Self::FunctionTool(payload)),
                            Err(error) => error,
                        };
                        let mut structural_match: Option<(Self, &'static str)> = None;
                        if let Ok(payload) = serde_json::from_value::<
                            RetrievalTool,
                        >(value.clone()) {
                            if let Some((_, first_name)) = &structural_match {
                                return Err(
                                    serde::de::Error::custom(
                                        format!(
                                            "discriminator `{}` value `{}` did not fit its mapped branch and structurally matched both `{}` and `{}`",
                                            "type", "function", first_name, stringify!(RetrievalTool),
                                        ),
                                    ),
                                );
                            }
                            structural_match = Some((
                                Self::RetrievalTool(payload),
                                stringify!(RetrievalTool),
                            ));
                        }
                        match structural_match {
                            Some((payload, _)) => Ok(payload),
                            None => Err(serde::de::Error::custom(primary_error)),
                        }
                    }
                    "retrieval" => {
                        let primary_error = match serde_json::from_value::<
                            RetrievalTool,
                        >(value.clone()) {
                            Ok(payload) => return Ok(Self::RetrievalTool(payload)),
                            Err(error) => error,
                        };
                        let mut structural_match: Option<(Self, &'static str)> = None;
                        if let Ok(payload) = serde_json::from_value::<
                            FunctionTool,
                        >(value.clone()) {
                            if let Some((_, first_name)) = &structural_match {
                                return Err(
                                    serde::de::Error::custom(
                                        format!(
                                            "discriminator `{}` value `{}` did not fit its mapped branch and structurally matched both `{}` and `{}`",
                                            "type", "retrieval", first_name, stringify!(FunctionTool),
                                        ),
                                    ),
                                );
                            }
                            structural_match = Some((
                                Self::FunctionTool(payload),
                                stringify!(FunctionTool),
                            ));
                        }
                        match structural_match {
                            Some((payload, _)) => Ok(payload),
                            None => Err(serde::de::Error::custom(primary_error)),
                        }
                    }
                    other => {
                        Err(
                            serde::de::Error::custom(
                                format!(
                                    "unknown discriminator value `{other}` for `{}`", "type",
                                ),
                            ),
                        )
                    }
                }
            }
            None => {
                Err(
                    serde::de::Error::custom(
                        concat!("missing string discriminator `", "type", "`",),
                    ),
                )
            }
        }
    }
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RetrievalTool {
    pub query: String,
    pub r#type: serde_json::Value,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FunctionTool {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub name: String,
    pub r#type: serde_json::Value,
}