openapiv3_resolve/resolved/
components.rs1use super::resolver::{Resolvable, Resolver};
2use super::{
3 ResolvedCallback, ResolvedHeader, ResolvedParameter, ResolvedRequestBody, ResolvedResponse,
4 ResolvedSchema, Shared,
5};
6use crate::ResolveError;
7use indexmap::IndexMap;
8use openapiv3::{Components, Example, Link, SecurityScheme};
9
10#[derive(Debug, PartialEq)]
13pub struct ResolvedComponents {
14 pub schemas: IndexMap<String, Shared<ResolvedSchema>>,
16 pub responses: IndexMap<String, Shared<ResolvedResponse>>,
18 pub parameters: IndexMap<String, Shared<ResolvedParameter>>,
20 pub examples: IndexMap<String, Shared<Example>>,
22 pub request_bodies: IndexMap<String, Shared<ResolvedRequestBody>>,
24 pub headers: IndexMap<String, Shared<ResolvedHeader>>,
26 pub security_schemes: IndexMap<String, Shared<SecurityScheme>>,
28 pub links: IndexMap<String, Shared<Link>>,
30 pub callbacks: IndexMap<String, Shared<ResolvedCallback>>,
32 pub extensions: IndexMap<String, serde_json::Value>,
34}
35
36impl Resolvable for Components {
37 type Resolved = ResolvedComponents;
38
39 fn resolve_inline(&self, cx: &mut Resolver<'_>) -> Result<Self::Resolved, ResolveError> {
40 Ok(ResolvedComponents {
41 schemas: cx.section(&self.schemas)?,
42 responses: cx.section(&self.responses)?,
43 parameters: cx.section(&self.parameters)?,
44 examples: cx.section(&self.examples)?,
45 request_bodies: cx.section(&self.request_bodies)?,
46 headers: cx.section(&self.headers)?,
47 security_schemes: cx.section(&self.security_schemes)?,
48 links: cx.section(&self.links)?,
49 callbacks: cx.section(&self.callbacks)?,
50 extensions: self.extensions.clone(),
51 })
52 }
53}