@@ -657,6 +657,7 @@ private actor Promise<Value: Sendable> {
657657
658658@available ( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * )
659659extension Transaction {
660+ #if compiler(>=6.0)
660661 fileprivate static func makeWithResultTask(
661662 request: sending PreparedRequest,
662663 requestOptions: RequestOptions = . forTests( ) ,
@@ -684,4 +685,40 @@ extension Transaction {
684685
685686 return ( await transactionPromise. value, task)
686687 }
688+ #else
689+ fileprivate static func makeWithResultTask(
690+ request: PreparedRequest ,
691+ requestOptions: RequestOptions = . forTests( ) ,
692+ logger: Logger = Logger ( label: " test " ) ,
693+ connectionDeadline: NIODeadline = . distantFuture,
694+ preferredEventLoop: EventLoop
695+ ) async -> ( Transaction , _Concurrency . Task < HTTPClientResponse , Error > ) {
696+ // It isn't sendable ... but on 6.0 and later we use 'sending'.
697+ struct UnsafePrepareRequest : @unchecked Sendable {
698+ var value : PreparedRequest
699+ }
700+
701+ let transactionPromise = Promise < Transaction > ( )
702+ let unsafe = UnsafePrepareRequest ( value: request)
703+ let task = Task {
704+ try await withCheckedThrowingContinuation {
705+ ( continuation: CheckedContinuation < HTTPClientResponse , Error > ) in
706+ let request = unsafe. value
707+ let transaction = Transaction (
708+ request: request,
709+ requestOptions: requestOptions,
710+ logger: logger,
711+ connectionDeadline: connectionDeadline,
712+ preferredEventLoop: preferredEventLoop,
713+ responseContinuation: continuation
714+ )
715+ Task {
716+ await transactionPromise. fulfil ( transaction)
717+ }
718+ }
719+ }
720+
721+ return ( await transactionPromise. value, task)
722+ }
723+ #endif
687724}
0 commit comments