diff --git a/Sources/OpenAPIRuntime/Conversion/URLExtensions.swift b/Sources/OpenAPIRuntime/Conversion/URLExtensions.swift index 432d78ae..ef94ab1d 100644 --- a/Sources/OpenAPIRuntime/Conversion/URLExtensions.swift +++ b/Sources/OpenAPIRuntime/Conversion/URLExtensions.swift @@ -14,19 +14,28 @@ import Foundation extension URL { + private static func defaultOpenAPIServer () -> Self { + guard let url = URL(string: "/") else { fatalError("Failed to create an URL with the string '/'.") } + return url + } + + #if swift(>=6.0) /// Returns the default server URL of "/". /// /// Specification: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields - public static let defaultOpenAPIServerURL: Self = { - guard let url = URL(string: "/") else { fatalError("Failed to create an URL with the string '/'.") } - return url - }() - - /// Returns a validated server URL, or throws an error. - /// - Parameter string: A URL string. - /// - Throws: If the provided string doesn't convert to URL. - public init(validatingOpenAPIServerURL string: String) throws { - guard let url = Self(string: string) else { throw RuntimeError.invalidServerURL(string) } - self = url - } + public nonisolated(unsafe) static let defaultOpenAPIServerURL: Self = defaultOpenAPIServer() + #else + /// Returns the default server URL of "/". + /// + /// Specification: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields + public static let defaultOpenAPIServerURL: Self = defaultOpenAPIServer() + #endif + + /// Returns a validated server URL, or throws an error. + /// - Parameter string: A URL string. + /// - Throws: If the provided string doesn't convert to URL. + public init(validatingOpenAPIServerURL string: String) throws { + guard let url = Self(string: string) else { throw RuntimeError.invalidServerURL(string) } + self = url + } } diff --git a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift index c5823ec2..312f9bdf 100644 --- a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift +++ b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift @@ -342,8 +342,17 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromPartSequence() { case .returnNil: return nil case .fetchFrame: + let frame : Upstream.AsyncIterator.Element? var upstream = upstream - let frame = try await upstream.next() + if #available(macOS 15, iOS 18.0, tvOS 18.0, watchOS 11.0, macCatalyst 18.0, visionOS 2.0, *) { + #if compiler(>=6.0) + frame = try await upstream.next(isolation: self) + #else + frame = try await upstream.next() + #endif + } else { + frame = try await upstream.next() + } self.upstream = upstream switch stateMachine.partReceivedFrame(frame) { case .returnNil: return nil @@ -365,8 +374,17 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromBodySubsequence() { case .returnNil: return nil case .fetchFrame: + let frame : Upstream.AsyncIterator.Element? var upstream = upstream - let frame = try await upstream.next() + if #available(macOS 15, iOS 18.0, tvOS 18.0, watchOS 11.0, macCatalyst 18.0, visionOS 2.0, *) { + #if compiler(>=6.0) + frame = try await upstream.next(isolation: self) + #else + frame = try await upstream.next() + #endif + } else { + frame = try await upstream.next() + } self.upstream = upstream switch stateMachine.bodyReceivedFrame(frame) { case .returnNil: return nil diff --git a/Sources/OpenAPIRuntime/URICoder/Serialization/URISerializer.swift b/Sources/OpenAPIRuntime/URICoder/Serialization/URISerializer.swift index 45d3b0da..5f00bcc9 100644 --- a/Sources/OpenAPIRuntime/URICoder/Serialization/URISerializer.swift +++ b/Sources/OpenAPIRuntime/URICoder/Serialization/URISerializer.swift @@ -47,19 +47,34 @@ struct URISerializer { } extension CharacterSet { - + #if swift(>=6.0) + /// A character set of unreserved symbols only from RFC 6570 (excludes + /// alphanumeric characters). + fileprivate nonisolated(unsafe) static let unreservedSymbols: CharacterSet = .init(charactersIn: "-._~") + + /// A character set of unreserved characters from RFC 6570. + fileprivate nonisolated(unsafe) static let unreserved: CharacterSet = .alphanumerics.union(unreservedSymbols) + + /// A character set with only the space character. + fileprivate nonisolated(unsafe) static let space: CharacterSet = .init(charactersIn: " ") + + /// A character set of unreserved characters and a space. + fileprivate nonisolated(unsafe) static let unreservedAndSpace: CharacterSet = .unreserved.union(space) + #else + /// A character set of unreserved symbols only from RFC 6570 (excludes /// alphanumeric characters). fileprivate static let unreservedSymbols: CharacterSet = .init(charactersIn: "-._~") - + /// A character set of unreserved characters from RFC 6570. fileprivate static let unreserved: CharacterSet = .alphanumerics.union(unreservedSymbols) - + /// A character set with only the space character. fileprivate static let space: CharacterSet = .init(charactersIn: " ") - + /// A character set of unreserved characters and a space. fileprivate static let unreservedAndSpace: CharacterSet = .unreserved.union(space) + #endif } extension URISerializer {