use crate::models::paths::{Callback, Example, Header, Link, Parameter, RequestBody, Response};
use crate::models::reference_or::ReferenceOr;
use crate::models::security::SecurityScheme;
use indexmap::IndexMap;
use schemars::schema::Schema;
use serde::Serialize;
use serde_json::Value;
use std::collections::BTreeMap;
#[derive(Serialize, Clone, Debug, Default)]
#[cfg_attr(
any(test, feature = "deserialize"),
derive(serde::Deserialize, PartialEq)
)]
#[serde(rename_all = "camelCase")]
pub struct Components {
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub schemas: BTreeMap<String, ReferenceOr<Schema>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub responses: BTreeMap<String, ReferenceOr<Response>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub parameters: BTreeMap<String, ReferenceOr<Parameter>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub examples: BTreeMap<String, ReferenceOr<Example>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub request_bodies: BTreeMap<String, ReferenceOr<RequestBody>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub headers: BTreeMap<String, ReferenceOr<Header>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub security_schemes: BTreeMap<String, ReferenceOr<SecurityScheme>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub links: BTreeMap<String, ReferenceOr<Link>>,
#[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
pub callbacks: BTreeMap<String, ReferenceOr<Callback>>,
#[serde(
flatten,
skip_serializing_if = "IndexMap::is_empty",
skip_deserializing
)]
pub extensions: IndexMap<String, Value>,
}
impl Components {
pub fn merge(&mut self, other: Components) {
self.schemas.extend(other.schemas);
self.responses.extend(other.responses);
self.parameters.extend(other.parameters);
self.examples.extend(other.examples);
self.request_bodies.extend(other.request_bodies);
self.headers.extend(other.headers);
self.security_schemes.extend(other.security_schemes);
self.links.extend(other.links);
self.callbacks.extend(other.callbacks);
self.extensions.extend(other.extensions);
}
}