@@ -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