openapiv3_resolve/resolved/
mod.rs1mod cache;
5mod components;
6mod discriminator;
7mod document;
8mod operation;
9mod parameter;
10mod resolver;
11mod response;
12mod schema;
13mod schema_type;
14mod shared;
15
16pub use components::ResolvedComponents;
17pub use discriminator::ResolvedDiscriminator;
18pub use document::{ResolvedCallback, ResolvedOpenAPI, ResolvedPathItem, ResolvedPaths};
19pub use operation::{ResolvedOperation, ResolvedResponses};
20pub use parameter::{
21 ResolvedHeader, ResolvedParameter, ResolvedParameterData, ResolvedParameterSchemaOrContent,
22};
23pub use response::{ResolvedEncoding, ResolvedMediaType, ResolvedRequestBody, ResolvedResponse};
24pub use schema::{
25 ResolvedAdditionalProperties, ResolvedSchema, ResolvedSchemaData, ResolvedSchemaKind,
26};
27pub use schema_type::{ResolvedAnySchema, ResolvedArrayType, ResolvedObjectType, ResolvedType};
28pub use shared::{NestedSchema, SchemaGuard, Shared};
29
30use crate::ResolveError;
31use indexmap::IndexMap;
32use openapiv3::{Example, Link, OpenAPI, SecurityScheme};
33use resolver::{Resolvable, Resolver};
34
35impl TryFrom<&OpenAPI> for ResolvedOpenAPI {
36 type Error = ResolveError;
37
38 fn try_from(openapi: &OpenAPI) -> Result<Self, Self::Error> {
46 openapi.resolve_inline(&mut Resolver::new(openapi))
47 }
48}
49
50impl TryFrom<OpenAPI> for ResolvedOpenAPI {
51 type Error = ResolveError;
52
53 fn try_from(openapi: OpenAPI) -> Result<Self, Self::Error> {
54 Self::try_from(&openapi)
55 }
56}
57
58fn resolve_map<T: Resolvable>(
60 map: &IndexMap<String, T>,
61 cx: &mut Resolver<'_>,
62) -> Result<IndexMap<String, T::Resolved>, ResolveError> {
63 map.iter()
64 .map(|(key, value)| Ok((key.clone(), value.resolve_inline(cx)?)))
65 .collect()
66}
67
68macro_rules! reference_free {
69 ($($ty:ty),+ $(,)?) => {
70 $(
71 impl Resolvable for $ty {
72 type Resolved = Self;
73
74 fn resolve_inline(&self, _: &mut Resolver<'_>) -> Result<Self, ResolveError> {
75 Ok(self.clone())
76 }
77 }
78 )+
79 };
80}
81
82reference_free!(Example, Link, SecurityScheme);