restify_openapi/models/
components.rs1use crate::models::paths::{Callback, Example, Header, Link, Parameter, RequestBody, Response};
2use crate::models::reference_or::ReferenceOr;
3use crate::models::security::SecurityScheme;
4use indexmap::IndexMap;
5use schemars::schema::Schema;
6use serde::Serialize;
7use serde_json::Value;
8use std::collections::BTreeMap;
9
10#[derive(Serialize, Clone, Debug, Default)]
12#[cfg_attr(
13 any(test, feature = "deserialize"),
14 derive(serde::Deserialize, PartialEq)
15)]
16#[serde(rename_all = "camelCase")]
17pub struct Components {
18 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
20 pub schemas: BTreeMap<String, ReferenceOr<Schema>>,
21 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
23 pub responses: BTreeMap<String, ReferenceOr<Response>>,
24 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
26 pub parameters: BTreeMap<String, ReferenceOr<Parameter>>,
27 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
29 pub examples: BTreeMap<String, ReferenceOr<Example>>,
30 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
32 pub request_bodies: BTreeMap<String, ReferenceOr<RequestBody>>,
33 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
35 pub headers: BTreeMap<String, ReferenceOr<Header>>,
36 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
38 pub security_schemes: BTreeMap<String, ReferenceOr<SecurityScheme>>,
39 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
41 pub links: BTreeMap<String, ReferenceOr<Link>>,
42 #[serde(skip_serializing_if = "BTreeMap::is_empty", default)]
44 pub callbacks: BTreeMap<String, ReferenceOr<Callback>>,
45 #[serde(
47 flatten,
48 skip_serializing_if = "IndexMap::is_empty",
49 skip_deserializing
50 )]
51 pub extensions: IndexMap<String, Value>,
52}
53
54impl Components {
55 pub fn merge(&mut self, other: Components) {
56 self.schemas.extend(other.schemas);
57 self.responses.extend(other.responses);
58 self.parameters.extend(other.parameters);
59 self.examples.extend(other.examples);
60 self.request_bodies.extend(other.request_bodies);
61 self.headers.extend(other.headers);
62 self.security_schemes.extend(other.security_schemes);
63 self.links.extend(other.links);
64 self.callbacks.extend(other.callbacks);
65 self.extensions.extend(other.extensions);
66 }
67}