use serde::{Deserialize, Serialize};
use crate::{
spec::{
spec_extensions, Callback, Example, Header, Link, ObjectOrReference, Parameter, PathItem,
RequestBody, Response, Schema, SecurityScheme,
},
Map,
};
#[derive(Debug, Clone, Default, PartialEq, Deserialize, Serialize)]
pub struct Components {
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub schemas: Map<String, Schema>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub responses: Map<String, ObjectOrReference<Response>>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub parameters: Map<String, ObjectOrReference<Parameter>>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub examples: Map<String, ObjectOrReference<Example>>,
#[serde(
rename = "requestBodies",
default,
skip_serializing_if = "Map::is_empty"
)]
pub request_bodies: Map<String, ObjectOrReference<RequestBody>>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub headers: Map<String, ObjectOrReference<Header>>,
#[serde(rename = "pathItems", default, skip_serializing_if = "Map::is_empty")]
pub path_items: Map<String, ObjectOrReference<PathItem>>,
#[serde(
rename = "securitySchemes",
default,
skip_serializing_if = "Map::is_empty"
)]
pub security_schemes: Map<String, ObjectOrReference<SecurityScheme>>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub links: Map<String, ObjectOrReference<Link>>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub callbacks: Map<String, ObjectOrReference<Callback>>,
#[serde(flatten, with = "spec_extensions")]
pub extensions: Map<String, serde_json::Value>,
}