Skip to content

Commit 31daf62

Browse files
authored
Merge pull request #99 from mattpolzin/bugfix/reference-schema-fragments
Bugfix/reference schema fragments
2 parents 7160eac + b38aa24 commit 31daf62

File tree

4 files changed

+454
-0
lines changed

4 files changed

+454
-0
lines changed

Sources/OpenAPIKit/Schema Object/JSONSchemaFragment.swift

+33
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public enum JSONSchemaFragment: Equatable {
4343
GeneralContext,
4444
ObjectContext
4545
)
46+
47+
case reference(JSONReference<JSONSchema>)
4648
}
4749

4850
extension JSONSchemaFragment {
@@ -223,6 +225,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
223225
.array(let generalContext, _),
224226
.object(let generalContext, _):
225227
return generalContext.format
228+
case .reference:
229+
return nil
226230
}
227231
}
228232

@@ -236,6 +240,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
236240
.array(let generalContext, _),
237241
.object(let generalContext, _):
238242
return generalContext.description
243+
case .reference:
244+
return nil
239245
}
240246
}
241247

@@ -249,6 +255,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
249255
.array(let generalContext, _),
250256
.object(let generalContext, _):
251257
return generalContext.title
258+
case .reference:
259+
return nil
252260
}
253261
}
254262

@@ -262,6 +270,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
262270
.array(let generalContext, _),
263271
.object(let generalContext, _):
264272
return generalContext.nullable
273+
case .reference:
274+
return nil
265275
}
266276
}
267277

@@ -275,6 +285,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
275285
.array(let generalContext, _),
276286
.object(let generalContext, _):
277287
return generalContext.deprecated
288+
case .reference:
289+
return nil
278290
}
279291
}
280292

@@ -288,6 +300,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
288300
.array(let generalContext, _),
289301
.object(let generalContext, _):
290302
return generalContext.externalDocs
303+
case .reference:
304+
return nil
291305
}
292306
}
293307

@@ -301,6 +315,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
301315
.array(let generalContext, _),
302316
.object(let generalContext, _):
303317
return generalContext.allowedValues
318+
case .reference:
319+
return nil
304320
}
305321
}
306322

@@ -314,6 +330,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
314330
.array(let generalContext, _),
315331
.object(let generalContext, _):
316332
return generalContext.example
333+
case .reference:
334+
return nil
317335
}
318336
}
319337

@@ -327,6 +345,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
327345
.array(let generalContext, _),
328346
.object(let generalContext, _):
329347
return generalContext.readOnly
348+
case .reference:
349+
return nil
330350
}
331351
}
332352

@@ -340,6 +360,8 @@ extension JSONSchemaFragment: JSONSchemaFragmentContext {
340360
.array(let generalContext, _),
341361
.object(let generalContext, _):
342362
return generalContext.writeOnly
363+
case .reference:
364+
return nil
343365
}
344366
}
345367
}
@@ -428,6 +450,10 @@ extension JSONSchemaFragment: Encodable {
428450
try container.encodeIfPresent(objectContext.properties, forKey: .properties)
429451
try container.encodeIfPresent(objectContext.additionalProperties, forKey: .additionalProperties)
430452
try container.encodeIfPresent(objectContext.required, forKey: .required)
453+
case .reference(let reference):
454+
var container = encoder.singleValueContainer()
455+
456+
try container.encode(reference)
431457
}
432458
}
433459
}
@@ -509,6 +535,13 @@ extension JSONSchemaFragment.ObjectContext: Decodable {
509535
extension JSONSchemaFragment: Decodable {
510536
public init(from decoder: Decoder) throws {
511537

538+
if let singleValueContainer = try? decoder.singleValueContainer() {
539+
if let ref = try? singleValueContainer.decode(JSONReference<JSONSchema>.self) {
540+
self = .reference(ref)
541+
return
542+
}
543+
}
544+
512545
let generalContext = try GeneralContext(from: decoder)
513546

514547
let generalContainer = try decoder.container(keyedBy: JSONSchemaFragment.GeneralCodingKeys.self)

0 commit comments

Comments
 (0)