Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/release/4_0' into load-external-…
Browse files Browse the repository at this point in the history
…references-v4
  • Loading branch information
mattpolzin committed Mar 27, 2024
2 parents 0f426e8 + 979315e commit b8c7c6e
Show file tree
Hide file tree
Showing 4 changed files with 353 additions and 54 deletions.
6 changes: 6 additions & 0 deletions Sources/OpenAPIKit/Schema Object/DereferencedJSONSchema.swift
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,12 @@ public enum DereferencedJSONSchema: Equatable, JSONSchemaContext {
// See `JSONSchemaContext`
public var examples: [AnyCodable] { jsonSchema.examples }

// See `JSONSchemaContext`
public var anchor: String? { jsonSchema.anchor }

// See `JSONSchemaContext`
public var dynamicAnchor: String? { jsonSchema.dynamicAnchor }

// See `JSONSchemaContext`
public var inferred: Bool { jsonSchema.inferred }

Expand Down
148 changes: 114 additions & 34 deletions Sources/OpenAPIKit/Schema Object/JSONSchema.swift
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,17 @@ public struct JSONSchema: JSONSchemaContext, HasWarnings {
return coreContext.examples
}

// See `JSONSchemaContext`
public var anchor: String? {
return coreContext.anchor
}

// See `JSONSchemaContext`
public var dynamicAnchor: String? {
return coreContext.dynamicAnchor

}

// See `JSONSchemaContext`
public var inferred: Bool {
return coreContext.inferred
Expand Down Expand Up @@ -1078,7 +1089,9 @@ extension JSONSchema {
externalDocs: OpenAPI.ExternalDocumentation? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let context = JSONSchema.CoreContext<JSONTypeFormat.BooleanFormat>(
format: format,
Expand All @@ -1092,7 +1105,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
return .boolean(context)
}
Expand All @@ -1111,7 +1126,9 @@ extension JSONSchema {
externalDocs: OpenAPI.ExternalDocumentation? = nil,
allowedValues: AnyCodable...,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .boolean(
format: format,
Expand All @@ -1125,7 +1142,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
}

Expand All @@ -1148,7 +1167,9 @@ extension JSONSchema {
externalDocs: OpenAPI.ExternalDocumentation? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let context = JSONSchema.CoreContext<JSONTypeFormat.AnyFormat>(
format: format,
Expand All @@ -1162,7 +1183,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
return .fragment(context)
}
Expand All @@ -1181,7 +1204,9 @@ extension JSONSchema {
externalDocs: OpenAPI.ExternalDocumentation? = nil,
allowedValues: AnyCodable...,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .fragment(
format: format,
Expand All @@ -1195,7 +1220,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
}

Expand Down Expand Up @@ -1226,7 +1253,9 @@ extension JSONSchema {
contentEncoding: OpenAPI.ContentEncoding? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let genericContext = JSONSchema.CoreContext<JSONTypeFormat.StringFormat>(
format: format,
Expand All @@ -1240,7 +1269,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
let stringContext = JSONSchema.StringContext(
maxLength: maxLength,
Expand Down Expand Up @@ -1271,7 +1302,9 @@ extension JSONSchema {
contentEncoding: OpenAPI.ContentEncoding? = nil,
allowedValues: AnyCodable...,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .string(
format: format,
Expand All @@ -1290,7 +1323,9 @@ extension JSONSchema {
contentEncoding: contentEncoding,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
}

Expand All @@ -1316,7 +1351,9 @@ extension JSONSchema {
minimum: (Double, exclusive: Bool)? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let genericContext = JSONSchema.CoreContext<JSONTypeFormat.NumberFormat>(
format: format,
Expand All @@ -1330,7 +1367,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
let numbericContext = JSONSchema.NumericContext(
multipleOf: multipleOf,
Expand All @@ -1357,7 +1396,9 @@ extension JSONSchema {
minimum: (Double, exclusive: Bool)? = nil,
allowedValues: AnyCodable...,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .number(
format: format,
Expand All @@ -1374,7 +1415,9 @@ extension JSONSchema {
minimum: minimum,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
}

Expand All @@ -1400,7 +1443,9 @@ extension JSONSchema {
minimum: (Int, exclusive: Bool)? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let genericContext = JSONSchema.CoreContext<JSONTypeFormat.IntegerFormat>(
format: format,
Expand All @@ -1414,7 +1459,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
let integerContext = JSONSchema.IntegerContext(
multipleOf: multipleOf,
Expand All @@ -1441,7 +1488,9 @@ extension JSONSchema {
minimum: (Int, exclusive: Bool)? = nil,
allowedValues: AnyCodable...,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .integer(
format: format,
Expand All @@ -1458,7 +1507,9 @@ extension JSONSchema {
minimum: minimum,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
}

Expand All @@ -1485,7 +1536,9 @@ extension JSONSchema {
additionalProperties: Either<Bool, JSONSchema>? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let coreContext = JSONSchema.CoreContext<JSONTypeFormat.ObjectFormat>(
format: format,
Expand All @@ -1499,7 +1552,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
let objectContext = JSONSchema.ObjectContext(
properties: properties,
Expand Down Expand Up @@ -1533,7 +1588,9 @@ extension JSONSchema {
items: JSONSchema? = nil,
allowedValues: [AnyCodable]? = nil,
defaultValue: AnyCodable? = nil,
examples: [AnyCodable] = []
examples: [AnyCodable] = [],
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
let coreContext = JSONSchema.CoreContext<JSONTypeFormat.ArrayFormat>(
format: format,
Expand All @@ -1547,7 +1604,9 @@ extension JSONSchema {
externalDocs: externalDocs,
allowedValues: allowedValues,
defaultValue: defaultValue,
examples: examples
examples: examples,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)

let arrayContext = JSONSchema.ArrayContext(
Expand Down Expand Up @@ -1579,15 +1638,19 @@ extension JSONSchema {
required: Bool = true,
title: String? = nil,
description: String? = nil,
discriminator: OpenAPI.Discriminator? = nil
discriminator: OpenAPI.Discriminator? = nil,
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .all(
of: schemas,
core: .init(
required: required,
title: title,
description: description,
discriminator: discriminator
discriminator: discriminator,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
)
}
Expand All @@ -1607,15 +1670,19 @@ extension JSONSchema {
required: Bool = true,
title: String? = nil,
description: String? = nil,
discriminator: OpenAPI.Discriminator? = nil
discriminator: OpenAPI.Discriminator? = nil,
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .one(
of: schemas,
core: .init(
required: required,
title: title,
description: description,
discriminator: discriminator
discriminator: discriminator,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
)
}
Expand All @@ -1635,15 +1702,19 @@ extension JSONSchema {
required: Bool = true,
title: String? = nil,
description: String? = nil,
discriminator: OpenAPI.Discriminator? = nil
discriminator: OpenAPI.Discriminator? = nil,
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .any(
of: schemas,
core: .init(
required: required,
title: title,
description: description,
discriminator: discriminator
discriminator: discriminator,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
)
}
Expand All @@ -1660,15 +1731,19 @@ extension JSONSchema {
required: Bool = true,
title: String? = nil,
description: String? = nil,
discriminator: OpenAPI.Discriminator? = nil
discriminator: OpenAPI.Discriminator? = nil,
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .not(
schema,
core: .init(
required: required,
title: title,
description: description,
discriminator: discriminator
discriminator: discriminator,
anchor: anchor,
dynamicAnchor: dynamicAnchor
)
)
}
Expand All @@ -1678,9 +1753,14 @@ extension JSONSchema {
_ reference: JSONReference<JSONSchema>,
required: Bool = true,
title: String? = nil,
description: String? = nil
description: String? = nil,
anchor: String? = nil,
dynamicAnchor: String? = nil
) -> JSONSchema {
return .reference(reference, .init(required: required, title: title, description: description))
return .reference(
reference,
.init(required: required, title: title, description: description, anchor: anchor, dynamicAnchor: dynamicAnchor)
)
}
}

Expand Down
Loading

0 comments on commit b8c7c6e

Please sign in to comment.