use crate::paths::{Callback, Example, Header, Link, Parameter, RequestBody, Response};
use crate::reference_or::ReferenceOr;
use crate::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>,
}