Skip to content

Commit 79ab6d8

Browse files
committed
move parameter schema or content into parameter context
1 parent 71912da commit 79ab6d8

21 files changed

+787
-441
lines changed

Sources/OpenAPIKit/Parameter/DereferencedParameter.swift

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,26 +90,59 @@ extension OpenAPI.Parameter: ExternallyDereferenceable {
9090
// next line:
9191
// let (newSchemaOrContent, components) = try await schemaOrContent.externallyDereferenced(with: loader)
9292

93-
let newSchemaOrContent: Either<SchemaContext, OpenAPI.Content.Map>
93+
let newContext: OpenAPI.Parameter.Context
9494
let newComponents: OpenAPI.Components
9595
let newMessages: [Loader.Message]
9696

97-
switch schemaOrContent {
98-
case .a(let schemaContext):
99-
let (context, components, messages) = try await schemaContext.externallyDereferenced(with: loader)
100-
newSchemaOrContent = .a(context)
101-
newComponents = components
102-
newMessages = messages
103-
case .b(let contentMap):
104-
let (map, components, messages) = try await contentMap.externallyDereferenced(with: loader)
105-
newSchemaOrContent = .b(map)
106-
newComponents = components
107-
newMessages = messages
97+
switch context {
98+
case .query(required: let required, allowEmptyValue: let allowEmptyValue, schemaOrContent: let schemaOrContent):
99+
let newSchemaOrContent: Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>
100+
(newSchemaOrContent, newComponents, newMessages) = try await externallyDereference(schemaOrContent: schemaOrContent, with: Loader.self)
101+
102+
newContext = .query(required: required, allowEmptyValue: allowEmptyValue, schemaOrContent: newSchemaOrContent)
103+
104+
case .header(required: let required, schemaOrContent: let schemaOrContent):
105+
let newSchemaOrContent: Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>
106+
(newSchemaOrContent, newComponents, newMessages) = try await externallyDereference(schemaOrContent: schemaOrContent, with: Loader.self)
107+
108+
newContext = .header(required: required, schemaOrContent: newSchemaOrContent)
109+
110+
case .path(schemaOrContent: let schemaOrContent):
111+
let newSchemaOrContent: Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>
112+
(newSchemaOrContent, newComponents, newMessages) = try await externallyDereference(schemaOrContent: schemaOrContent, with: Loader.self)
113+
114+
newContext = .path(schemaOrContent: newSchemaOrContent)
115+
116+
case .cookie(required: let required, schemaOrContent: let schemaOrContent):
117+
let newSchemaOrContent: Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>
118+
(newSchemaOrContent, newComponents, newMessages) = try await externallyDereference(schemaOrContent: schemaOrContent, with: Loader.self)
119+
120+
newContext = .cookie(required: required, schemaOrContent: newSchemaOrContent)
121+
122+
case .querystring(required: let required, content: let content):
123+
let newContent: OpenAPI.Content.Map
124+
(newContent, newComponents, newMessages) = try await content.externallyDereferenced(with: Loader.self)
125+
126+
newContext = .querystring(required: required, content: newContent)
108127
}
109128

110129
var newParameter = self
111-
newParameter.schemaOrContent = newSchemaOrContent
130+
newParameter.context = newContext
112131

113132
return (newParameter, newComponents, newMessages)
114133
}
115134
}
135+
136+
fileprivate func externallyDereference<Loader: ExternalLoader>(
137+
schemaOrContent: Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>,
138+
with loader: Loader.Type
139+
) async throws -> (Either<OpenAPI.Parameter.SchemaContext, OpenAPI.Content.Map>, OpenAPI.Components, [Loader.Message]) {
140+
switch schemaOrContent {
141+
case .a(let schemaContext):
142+
let (context, components, messages) = try await schemaContext.externallyDereferenced(with: loader)
143+
return (.a(context), components, messages)
144+
case .b(let contentMap):
145+
let (map, components, messages) = try await contentMap.externallyDereferenced(with: loader)
146+
return (.b(map), components, messages)
147+
}
148+
}

0 commit comments

Comments
 (0)