@@ -657,6 +657,7 @@ private actor Promise<Value: Sendable> {
657
657
658
658
@available ( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * )
659
659
extension Transaction {
660
+ #if compiler(>=6.0)
660
661
fileprivate static func makeWithResultTask(
661
662
request: sending PreparedRequest,
662
663
requestOptions: RequestOptions = . forTests( ) ,
@@ -684,4 +685,40 @@ extension Transaction {
684
685
685
686
return ( await transactionPromise. value, task)
686
687
}
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
687
724
}
0 commit comments