use super::resolver::{Resolvable, Resolver};
use super::{
ResolvedCallback, ResolvedHeader, ResolvedParameter, ResolvedRequestBody, ResolvedResponse,
ResolvedSchema, Shared,
};
use crate::ResolveError;
use indexmap::IndexMap;
use openapiv3::{Components, Example, Link, SecurityScheme};
#[derive(Debug, PartialEq)]
pub struct ResolvedComponents {
pub schemas: IndexMap<String, Shared<ResolvedSchema>>,
pub responses: IndexMap<String, Shared<ResolvedResponse>>,
pub parameters: IndexMap<String, Shared<ResolvedParameter>>,
pub examples: IndexMap<String, Shared<Example>>,
pub request_bodies: IndexMap<String, Shared<ResolvedRequestBody>>,
pub headers: IndexMap<String, Shared<ResolvedHeader>>,
pub security_schemes: IndexMap<String, Shared<SecurityScheme>>,
pub links: IndexMap<String, Shared<Link>>,
pub callbacks: IndexMap<String, Shared<ResolvedCallback>>,
pub extensions: IndexMap<String, serde_json::Value>,
}
impl Resolvable for Components {
type Resolved = ResolvedComponents;
fn resolve_inline(&self, cx: &mut Resolver<'_>) -> Result<Self::Resolved, ResolveError> {
Ok(ResolvedComponents {
schemas: cx.section(&self.schemas)?,
responses: cx.section(&self.responses)?,
parameters: cx.section(&self.parameters)?,
examples: cx.section(&self.examples)?,
request_bodies: cx.section(&self.request_bodies)?,
headers: cx.section(&self.headers)?,
security_schemes: cx.section(&self.security_schemes)?,
links: cx.section(&self.links)?,
callbacks: cx.section(&self.callbacks)?,
extensions: self.extensions.clone(),
})
}
}