Skip to content

Commit 570acbd

Browse files
committed
fix url decoding failure for recent versions of Foundation
1 parent bbb38ef commit 570acbd

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

Sources/OpenAPIKit/JSONReference.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,19 @@ extension JSONReference: Decodable {
469469
}
470470
self = .internal(internalReference)
471471
} else {
472-
guard let externalReference = URL(string: referenceString) else {
472+
let externalReferenceCandidate: URL?
473+
#if canImport(FoundationEssentials)
474+
externalReferenceCandidate = URL(string: referenceString, encodingInvalidCharacters: false)
475+
#elseif os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
476+
if #available(macOS 14.0, iOS 17.0, watchOS 10.0, tvOS 17.0, *) {
477+
externalReferenceCandidate = URL(string: referenceString, encodingInvalidCharacters: false)
478+
} else {
479+
externalReferenceCandidate = URL(string: referenceString)
480+
}
481+
#else
482+
externalReferenceCandidate = URL(string: referenceString)
483+
#endif
484+
guard let externalReference = externalReferenceCandidate else {
473485
throw InconsistencyError(
474486
subjectName: "JSON Reference",
475487
details: "Failed to parse a valid URI for a JSON Reference from '\(referenceString)'",

Sources/OpenAPIKit30/JSONReference.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,19 @@ extension JSONReference: Decodable {
333333
}
334334
self = .internal(internalReference)
335335
} else {
336-
guard let externalReference = URL(string: referenceString) else {
336+
let externalReferenceCandidate: URL?
337+
#if canImport(FoundationEssentials)
338+
externalReferenceCandidate = URL(string: referenceString, encodingInvalidCharacters: false)
339+
#elseif os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
340+
if #available(macOS 14.0, iOS 17.0, watchOS 10.0, tvOS 17.0, *) {
341+
externalReferenceCandidate = URL(string: referenceString, encodingInvalidCharacters: false)
342+
} else {
343+
externalReferenceCandidate = URL(string: referenceString)
344+
}
345+
#else
346+
externalReferenceCandidate = URL(string: referenceString)
347+
#endif
348+
guard let externalReference = externalReferenceCandidate else {
337349
throw InconsistencyError(
338350
subjectName: "JSON Reference",
339351
details: "Failed to parse a valid URI for a JSON Reference from '\(referenceString)'",

0 commit comments

Comments
 (0)