From d7864bf9ba7b269c4fa93a0b29a2143976575a10 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Wed, 19 Jun 2024 21:42:27 -0400 Subject: [PATCH 1/5] Fixing Issues with Async Upstream --- .../MultipartFramesToRawPartsSequence.swift | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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 From 236c14b2c7cb7d047875657700773af7c43a66e7 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Sun, 23 Jun 2024 15:33:35 -0400 Subject: [PATCH 2/5] fixup! Fixing Issues with Async Upstream --- .../MultipartFramesToRawPartsSequence.swift | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift index 312f9bdf..820e68e7 100644 --- a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift +++ b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift @@ -342,17 +342,17 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromPartSequence() { case .returnNil: return nil case .fetchFrame: - let frame : Upstream.AsyncIterator.Element? + let frame: Upstream.AsyncIterator.Element? var upstream = upstream - 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() - } + 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 @@ -374,17 +374,17 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromBodySubsequence() { case .returnNil: return nil case .fetchFrame: - let frame : Upstream.AsyncIterator.Element? + let frame: Upstream.AsyncIterator.Element? var upstream = upstream - 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() - } + 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 From 6b87084e290f6e04476788526cff2c762d6309a2 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Mon, 24 Jun 2024 09:10:50 -0400 Subject: [PATCH 3/5] refactor isolated actor polyfill --- .../MultipartFramesToRawPartsSequence.swift | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift index 820e68e7..cb0b557c 100644 --- a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift +++ b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift @@ -64,6 +64,25 @@ extension MultipartFramesToRawPartsSequence: AsyncSequence { } } +extension AsyncIteratorProtocol { + /// Asynchronously advances to the next element and returns it, or ends the + /// sequence if there is no next element. + /// + /// - Returns: The next element, if it exists, or `nil` to signal the end of + /// the sequence. + fileprivate mutating func next(isolatedWith actor: isolated (any Actor)?) async throws -> Self.Element? { + if #available(macOS 15, iOS 18.0, tvOS 18.0, watchOS 11.0, macCatalyst 18.0, visionOS 2.0, *) { + #if compiler(>=6.0) + return try await self.next(isolation: actor) + #else + return try await self.next() + #endif + } else { + return try await self.next() + } + } +} + extension HTTPBody { /// Creates a new body from the provided header fields and body closure. @@ -342,17 +361,8 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromPartSequence() { case .returnNil: return nil case .fetchFrame: - let frame: Upstream.AsyncIterator.Element? var upstream = upstream - 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() - } + let frame = try await upstream.next(isolatedWith: self) self.upstream = upstream switch stateMachine.partReceivedFrame(frame) { case .returnNil: return nil @@ -374,17 +384,8 @@ extension MultipartFramesToRawPartsSequence { switch stateMachine.nextFromBodySubsequence() { case .returnNil: return nil case .fetchFrame: - let frame: Upstream.AsyncIterator.Element? var upstream = upstream - 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() - } + let frame = try await upstream.next(isolatedWith: self) self.upstream = upstream switch stateMachine.bodyReceivedFrame(frame) { case .returnNil: return nil From 4689cf4a9b5b31e1d1e3eb38beab8ead557b33df Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Mon, 24 Jun 2024 10:26:13 -0400 Subject: [PATCH 4/5] Revert "refactor isolated actor polyfill" This reverts commit 6b87084e290f6e04476788526cff2c762d6309a2. --- .../MultipartFramesToRawPartsSequence.swift | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift index cb0b557c..820e68e7 100644 --- a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift +++ b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift @@ -64,25 +64,6 @@ extension MultipartFramesToRawPartsSequence: AsyncSequence { } } -extension AsyncIteratorProtocol { - /// Asynchronously advances to the next element and returns it, or ends the - /// sequence if there is no next element. - /// - /// - Returns: The next element, if it exists, or `nil` to signal the end of - /// the sequence. - fileprivate mutating func next(isolatedWith actor: isolated (any Actor)?) async throws -> Self.Element? { - if #available(macOS 15, iOS 18.0, tvOS 18.0, watchOS 11.0, macCatalyst 18.0, visionOS 2.0, *) { - #if compiler(>=6.0) - return try await self.next(isolation: actor) - #else - return try await self.next() - #endif - } else { - return try await self.next() - } - } -} - extension HTTPBody { /// Creates a new body from the provided header fields and body closure. @@ -361,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(isolatedWith: self) + 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 @@ -384,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(isolatedWith: self) + 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 From 502d7796d25fadd70ed106d65981fa02eb413cf1 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Tue, 2 Jul 2024 09:07:29 -0400 Subject: [PATCH 5/5] moving os check --- .../MultipartFramesToRawPartsSequence.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift index 820e68e7..8734b6aa 100644 --- a/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift +++ b/Sources/OpenAPIRuntime/Multipart/MultipartFramesToRawPartsSequence.swift @@ -344,15 +344,15 @@ extension MultipartFramesToRawPartsSequence { case .fetchFrame: let frame: Upstream.AsyncIterator.Element? var upstream = upstream + #if compiler(>=6.0) 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() } + #else + frame = try await upstream.next() + #endif self.upstream = upstream switch stateMachine.partReceivedFrame(frame) { case .returnNil: return nil @@ -376,15 +376,15 @@ extension MultipartFramesToRawPartsSequence { case .fetchFrame: let frame: Upstream.AsyncIterator.Element? var upstream = upstream + #if compiler(>=6.0) 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() } + #else + frame = try await upstream.next() + #endif self.upstream = upstream switch stateMachine.bodyReceivedFrame(frame) { case .returnNil: return nil