Skip to content

Commit e229b90

Browse files
authored
Merge pull request #475 from mattpolzin/feature/consolidate-warning-helpers
remove duplicated warning helper code
2 parents f87213f + 8cb2e0b commit e229b90

11 files changed

Lines changed: 49 additions & 126 deletions

File tree

Sources/OpenAPIKit/Components Object/Components.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ extension OpenAPI {
9898
self.vendorExtensions = vendorExtensions
9999

100100
self.conditionalWarnings = [
101-
nonEmptyVersionWarning(fieldName: "mediaTypes", value: mediaTypes, minimumVersion: .v3_2_0)
101+
OASWarnings.Doc.nonEmptyVersionWarning(objectName: "Components", fieldName: "mediaTypes", value: mediaTypes, minimumVersion: .v3_2_0)
102102
].compactMap { $0 }
103103
}
104104

@@ -161,15 +161,6 @@ extension OpenAPI.Components: Equatable {
161161
}
162162
}
163163

164-
fileprivate func nonEmptyVersionWarning(fieldName: String, value: any Collection, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
165-
if value.isEmpty { return nil }
166-
167-
return OpenAPI.Document.ConditionalWarnings.version(
168-
lessThan: minimumVersion,
169-
doesNotSupport: "The Components \(fieldName) map"
170-
)
171-
}
172-
173164
extension OpenAPI {
174165

175166
public typealias ComponentDictionary<T> = OrderedDictionary<ComponentKey, T>
@@ -328,7 +319,7 @@ extension OpenAPI.Components: Decodable {
328319
vendorExtensions = try Self.extensions(from: decoder)
329320

330321
conditionalWarnings = [
331-
nonEmptyVersionWarning(fieldName: "mediaTypes", value: mediaTypes, minimumVersion: .v3_2_0)
322+
OASWarnings.Doc.nonEmptyVersionWarning(objectName: "Components", fieldName: "mediaTypes", value: mediaTypes, minimumVersion: .v3_2_0)
332323
].compactMap { $0 }
333324
} catch let error as EitherDecodeNoTypesMatchedError {
334325
if let underlyingError = OpenAPI.Error.Decoding.Document.eitherBranchToDigInto(error) {

Sources/OpenAPIKit/Discriminator.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extension OpenAPI {
2626
self.defaultMapping = defaultMapping
2727

2828
self.conditionalWarnings = [
29-
nonNilVersionWarning(fieldName: "defaultMapping", value: defaultMapping, minimumVersion: .v3_2_0)
29+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Discriminator", fieldName: "defaultMapping", value: defaultMapping, minimumVersion: .v3_2_0)
3030
].compactMap { $0 }
3131
}
3232
}
@@ -40,15 +40,6 @@ extension OpenAPI.Discriminator: Equatable {
4040
}
4141
}
4242

43-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
44-
value.map { _ in
45-
OpenAPI.Document.ConditionalWarnings.version(
46-
lessThan: minimumVersion,
47-
doesNotSupport: "The Discriminator \(fieldName) field"
48-
)
49-
}
50-
}
51-
5243
// MARK: - Codable
5344

5445
extension OpenAPI.Discriminator: Encodable {
@@ -70,7 +61,7 @@ extension OpenAPI.Discriminator: Decodable {
7061
defaultMapping = try container.decodeIfPresent(String.self, forKey: .defaultMapping)
7162

7263
conditionalWarnings = [
73-
nonNilVersionWarning(fieldName: "defaultMapping", value: defaultMapping, minimumVersion: .v3_2_0)
64+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Discriminator", fieldName: "defaultMapping", value: defaultMapping, minimumVersion: .v3_2_0)
7465
].compactMap { $0 }
7566
}
7667
}

Sources/OpenAPIKit/Document/Document.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -177,21 +177,12 @@ extension OpenAPI {
177177

178178
self.conditionalWarnings = [
179179
// If $self is non-nil, the document must be OAS version 3.2.0 or greater
180-
nonNilVersionWarning(fieldName: "$self", value: selfURI, minimumVersion: .v3_2_0),
180+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Document", fieldName: "$self", value: selfURI, minimumVersion: .v3_2_0),
181181
].compactMap { $0 }
182182
}
183183
}
184184
}
185185

186-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
187-
value.map { _ in
188-
OpenAPI.Document.ConditionalWarnings.version(
189-
lessThan: minimumVersion,
190-
doesNotSupport: "The Document \(fieldName) field"
191-
)
192-
}
193-
}
194-
195186
extension OpenAPI.Document: Equatable {
196187
public static func == (lhs: Self, rhs: Self) -> Bool {
197188
lhs.openAPIVersion == rhs.openAPIVersion
@@ -713,7 +704,7 @@ extension OpenAPI.Document: Decodable {
713704

714705
self.conditionalWarnings = [
715706
// If $self is non-nil, the document must be OAS version 3.2.0 or greater
716-
nonNilVersionWarning(fieldName: "$self", value: selfURI, minimumVersion: .v3_2_0),
707+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Document", fieldName: "$self", value: selfURI, minimumVersion: .v3_2_0),
717708
].compactMap { $0 }
718709

719710
} catch let error as OpenAPI.Error.Decoding.Path {

Sources/OpenAPIKit/Example/Example.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,12 @@ extension OpenAPI.Example {
143143
extension OpenAPI.Example.Value {
144144
fileprivate var conditionalWarnings: [(any Condition, OpenAPI.Warning)] {
145145
[
146-
nonNilVersionWarning(fieldName: "dataValue", value: dataValue, minimumVersion: .v3_2_0),
147-
nonNilVersionWarning(fieldName: "serializedValue", value: serializedValue, minimumVersion: .v3_2_0)
146+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Example", fieldName: "dataValue", value: dataValue, minimumVersion: .v3_2_0),
147+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Example", fieldName: "serializedValue", value: serializedValue, minimumVersion: .v3_2_0)
148148
].compactMap { $0 }
149149
}
150150
}
151151

152-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
153-
value.map { _ in
154-
OpenAPI.Document.ConditionalWarnings.version(
155-
lessThan: minimumVersion,
156-
doesNotSupport: "The Example Object \(fieldName) field"
157-
)
158-
}
159-
}
160-
161152
// MARK: - Either Convenience
162153
extension Either where A == OpenAPI.Reference<OpenAPI.Example>, B == OpenAPI.Example {
163154
@available(*, deprecated, message: "This function populates the deprecated 'value' field, use .value(summary:description:dataValue:serializedValue:vendorExtensions:) or .value(summary:description:dataValue:externalValue:vendorExtensions:) instead.")

Sources/OpenAPIKit/OpenAPIConditionalWarnings.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,27 @@ internal extension OpenAPI.Document {
5757

5858
return (DocumentVersionCondition(version: version, comparator: .lessThan), warning)
5959
}
60+
61+
static func nonNilVersionWarning<Subject>(objectName: String, fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
62+
value.map { _ in
63+
OpenAPI.Document.ConditionalWarnings.version(
64+
lessThan: minimumVersion,
65+
doesNotSupport: "The \(objectName) \(fieldName) field"
66+
)
67+
}
68+
}
69+
70+
static func nonEmptyVersionWarning<Key, Value>(objectName: String, fieldName: String, value: OrderedDictionary<Key, Value>, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
71+
if value.isEmpty { return nil }
72+
73+
return OpenAPI.Document.ConditionalWarnings.version(
74+
lessThan: minimumVersion,
75+
doesNotSupport: "The \(objectName) \(fieldName) map"
76+
)
77+
}
6078
}
6179
}
80+
81+
internal enum OASWarnings {
82+
typealias Doc = OpenAPI.Document.ConditionalWarnings
83+
}

Sources/OpenAPIKit/Path Item/PathItem.swift

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ extension OpenAPI {
111111

112112
self.conditionalWarnings = [
113113
// If query is non-nil, the document must be OAS version 3.2.0 or greater
114-
nonNilVersionWarning(fieldName: "query", value: query, minimumVersion: .v3_2_0),
114+
OASWarnings.Doc.nonNilVersionWarning(objectName: "PathItem", fieldName: "query", value: query, minimumVersion: .v3_2_0),
115115
// If there are additionalOperations defiend, the document must be OAS version 3.2.0 or greater
116-
nonEmptyVersionWarning(fieldName: "additionalOperations", value: additionalOperations, minimumVersion: .v3_2_0)
116+
OASWarnings.Doc.nonEmptyVersionWarning(objectName: "PathItem", fieldName: "additionalOperations", value: additionalOperations, minimumVersion: .v3_2_0)
117117
].compactMap { $0 }
118118
}
119119

@@ -184,24 +184,6 @@ extension OpenAPI.PathItem: Equatable {
184184
}
185185
}
186186

187-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
188-
value.map { _ in
189-
OpenAPI.Document.ConditionalWarnings.version(
190-
lessThan: minimumVersion,
191-
doesNotSupport: "The PathItem \(fieldName) field"
192-
)
193-
}
194-
}
195-
196-
fileprivate func nonEmptyVersionWarning<Key, Value>(fieldName: String, value: OrderedDictionary<Key, Value>, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
197-
if value.isEmpty { return nil }
198-
199-
return OpenAPI.Document.ConditionalWarnings.version(
200-
lessThan: minimumVersion,
201-
doesNotSupport: "The PathItem \(fieldName) map"
202-
)
203-
}
204-
205187
extension OpenAPI.PathItem {
206188
public typealias Map = OrderedDictionary<OpenAPI.Path, Either<OpenAPI.Reference<OpenAPI.PathItem>, OpenAPI.PathItem>>
207189
}
@@ -379,9 +361,9 @@ extension OpenAPI.PathItem: Decodable {
379361

380362
self.conditionalWarnings = [
381363
// If query is non-nil, the document must be OAS version 3.2.0 or greater
382-
nonNilVersionWarning(fieldName: "query", value: query, minimumVersion: .v3_2_0),
364+
OASWarnings.Doc.nonNilVersionWarning(objectName: "PathItem", fieldName: "query", value: query, minimumVersion: .v3_2_0),
383365
// If there are additionalOperations defiend, the document must be OAS version 3.2.0 or greater
384-
nonEmptyVersionWarning(fieldName: "additionalOperations", value: additionalOperations, minimumVersion: .v3_2_0)
366+
OASWarnings.Doc.nonEmptyVersionWarning(objectName: "PathItem", fieldName: "additionalOperations", value: additionalOperations, minimumVersion: .v3_2_0)
385367
].compactMap { $0 }
386368
} catch let error as DecodingError {
387369
if let underlyingError = error.underlyingError as? KeyDecodingError {

Sources/OpenAPIKit/Response/Response.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ extension OpenAPI {
4747

4848
self.conditionalWarnings = [
4949
// If summary is non-nil, the document must be OAS version 3.2.0 or greater
50-
nonNilVersionWarning(fieldName: "summary", value: summary, minimumVersion: .v3_2_0),
50+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Response", fieldName: "summary", value: summary, minimumVersion: .v3_2_0),
5151
// If description is nil, the document must be OAS version 3.2.0 or greater
5252
notOptionalVersionWarning(fieldName: "description", value: description, minimumVersion: .v3_2_0)
5353
].compactMap { $0 }
@@ -66,15 +66,6 @@ extension OpenAPI.Response: Equatable {
6666
}
6767
}
6868

69-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
70-
value.map { _ in
71-
OpenAPI.Document.ConditionalWarnings.version(
72-
lessThan: minimumVersion,
73-
doesNotSupport: "The Response \(fieldName) field"
74-
)
75-
}
76-
}
77-
7869
fileprivate func notOptionalVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
7970
guard value == nil else { return nil }
8071

@@ -246,7 +237,7 @@ extension OpenAPI.Response: Decodable {
246237

247238
conditionalWarnings = [
248239
// If summary is non-nil, the document must be OAS version 3.2.0 or greater
249-
nonNilVersionWarning(fieldName: "summary", value: summary, minimumVersion: .v3_2_0),
240+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Response", fieldName: "summary", value: summary, minimumVersion: .v3_2_0),
250241
// If description is nil, the document must be OAS version 3.2.0 or greater
251242
notOptionalVersionWarning(fieldName: "description", value: description, minimumVersion: .v3_2_0)
252243
].compactMap { $0 }

Sources/OpenAPIKit/Security/OAuthFlows.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ extension OpenAPI {
3535
self.deviceAuthorization = deviceAuthorization
3636

3737
self.conditionalWarnings = [
38-
nonNilVersionWarning(fieldName: "deviceAuthorization", value: deviceAuthorization, minimumVersion: .v3_2_0)
38+
OASWarnings.Doc.nonNilVersionWarning(objectName: "OAuthFlows", fieldName: "deviceAuthorization", value: deviceAuthorization, minimumVersion: .v3_2_0)
3939
].compactMap { $0 }
4040
}
4141
}
@@ -51,15 +51,6 @@ extension OpenAPI.OAuthFlows: Equatable {
5151
}
5252
}
5353

54-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
55-
value.map { _ in
56-
OpenAPI.Document.ConditionalWarnings.version(
57-
lessThan: minimumVersion,
58-
doesNotSupport: "The OAuthFlows \(fieldName) field"
59-
)
60-
}
61-
}
62-
6354
extension OpenAPI.OAuthFlows {
6455
@dynamicMemberLookup
6556
public struct DeviceAuthorization: Equatable, Sendable {
@@ -120,7 +111,7 @@ extension OpenAPI.OAuthFlows: Decodable {
120111
deviceAuthorization = try container.decodeIfPresent(OpenAPI.OAuthFlows.DeviceAuthorization.self, forKey: .deviceAuthorization)
121112

122113
self.conditionalWarnings = [
123-
nonNilVersionWarning(fieldName: "deviceAuthorization", value: deviceAuthorization, minimumVersion: .v3_2_0)
114+
OASWarnings.Doc.nonNilVersionWarning(objectName: "OAuthFlows", fieldName: "deviceAuthorization", value: deviceAuthorization, minimumVersion: .v3_2_0)
124115
].compactMap { $0 }
125116
}
126117
}

Sources/OpenAPIKit/Security/SecurityScheme.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ extension OpenAPI {
4141
self.deprecated = deprecated
4242

4343
self.conditionalWarnings = [
44-
nonNilVersionWarning(fieldName: "oauth2MetadataUrl", value: type.oauth2MetadataUrl, minimumVersion: .v3_2_0),
44+
OASWarnings.Doc.nonNilVersionWarning(objectName: "SecurityScheme", fieldName: "oauth2MetadataUrl", value: type.oauth2MetadataUrl, minimumVersion: .v3_2_0),
4545
notFalseVersionWarning(fieldName: "deprecated", value: deprecated, minimumVersion: .v3_2_0)
4646
].compactMap { $0 }
4747
}
@@ -94,15 +94,6 @@ fileprivate func notFalseVersionWarning(fieldName: String, value: Bool, minimumV
9494
)
9595
}
9696

97-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
98-
value.map { _ in
99-
OpenAPI.Document.ConditionalWarnings.version(
100-
lessThan: minimumVersion,
101-
doesNotSupport: "The Security Scheme \(fieldName) field"
102-
)
103-
}
104-
}
105-
10697
extension OpenAPI.SecurityScheme.SecurityType {
10798
public enum Name: String, Codable {
10899
case apiKey
@@ -221,7 +212,7 @@ extension OpenAPI.SecurityScheme: Decodable {
221212
vendorExtensions = try Self.extensions(from: decoder)
222213

223214
self.conditionalWarnings = [
224-
nonNilVersionWarning(fieldName: "oauth2MetadataUrl", value: type.oauth2MetadataUrl, minimumVersion: .v3_2_0),
215+
OASWarnings.Doc.nonNilVersionWarning(objectName: "SecurityScheme", fieldName: "oauth2MetadataUrl", value: type.oauth2MetadataUrl, minimumVersion: .v3_2_0),
225216
notFalseVersionWarning(fieldName: "deprecated", value: deprecated, minimumVersion: .v3_2_0)
226217
].compactMap { $0 }
227218
}

Sources/OpenAPIKit/Server.swift

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ extension OpenAPI {
4949
self.vendorExtensions = vendorExtensions
5050

5151
self.conditionalWarnings = [
52-
nonNilVersionWarning(fieldName: "name", value: name, minimumVersion: .v3_2_0)
52+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Server", fieldName: "name", value: name, minimumVersion: .v3_2_0)
5353
].compactMap { $0 }
5454
}
5555

@@ -70,7 +70,7 @@ extension OpenAPI {
7070
self.vendorExtensions = vendorExtensions
7171

7272
self.conditionalWarnings = [
73-
nonNilVersionWarning(fieldName: "name", value: name, minimumVersion: .v3_2_0)
73+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Server", fieldName: "name", value: name, minimumVersion: .v3_2_0)
7474
].compactMap { $0 }
7575
}
7676
}
@@ -85,15 +85,6 @@ extension OpenAPI.Server: Equatable {
8585
}
8686
}
8787

88-
fileprivate func nonNilVersionWarning<Subject>(fieldName: String, value: Subject?, minimumVersion: OpenAPI.Document.Version) -> (any Condition, OpenAPI.Warning)? {
89-
value.map { _ in
90-
OpenAPI.Document.ConditionalWarnings.version(
91-
lessThan: minimumVersion,
92-
doesNotSupport: "The Server \(fieldName) field"
93-
)
94-
}
95-
}
96-
9788
extension OpenAPI.Server {
9889
/// OpenAPI Spec "Server Variable Object"
9990
///
@@ -171,7 +162,7 @@ extension OpenAPI.Server: Decodable {
171162
vendorExtensions = try Self.extensions(from: decoder)
172163

173164
conditionalWarnings = [
174-
nonNilVersionWarning(fieldName: "name", value: name, minimumVersion: .v3_2_0)
165+
OASWarnings.Doc.nonNilVersionWarning(objectName: "Server", fieldName: "name", value: name, minimumVersion: .v3_2_0)
175166
].compactMap { $0 }
176167
}
177168
}

0 commit comments

Comments
 (0)