@@ -26,8 +26,8 @@ extension ServerInterceptor where Self == RejectAllServerInterceptor {
26
26
RejectAllServerInterceptor ( throw: error)
27
27
}
28
28
29
- static func throwInProducer( _ error: any Error , after duration : Duration ) -> Self {
30
- RejectAllServerInterceptor ( throwInProducer: error, after : duration )
29
+ static func throwInProducer( _ error: any Error ) -> Self {
30
+ RejectAllServerInterceptor ( throwInProducer: error)
31
31
}
32
32
33
33
static func throwInMessageSequence( _ error: any Error ) -> Self {
@@ -51,7 +51,7 @@ struct RejectAllServerInterceptor: ServerInterceptor {
51
51
/// Reject the RPC with a given error.
52
52
case reject( RPCError )
53
53
/// Throw in the producer closure returned.
54
- case throwInProducer( any Error , after : Duration )
54
+ case throwInProducer( any Error )
55
55
/// Throw in the async sequence that stream inbound messages.
56
56
case throwInMessageSequence( any Error )
57
57
}
@@ -72,8 +72,8 @@ struct RejectAllServerInterceptor: ServerInterceptor {
72
72
self . mode = . reject( error)
73
73
}
74
74
75
- init ( throwInProducer error: any Error , after duration : Duration ) {
76
- self . mode = . throwInProducer( error, after : duration )
75
+ init ( throwInProducer error: any Error ) {
76
+ self . mode = . throwInProducer( error)
77
77
}
78
78
79
79
init ( throwInMessageSequence error: any Error ) {
@@ -93,45 +93,21 @@ struct RejectAllServerInterceptor: ServerInterceptor {
93
93
throw error
94
94
case . reject( let error) :
95
95
return StreamingServerResponse ( error: error)
96
- case . throwInProducer( let error, let duration ) :
96
+ case . throwInProducer( let error) :
97
97
var response = try await next ( request, context)
98
98
switch response. accepted {
99
99
case . success( var success) :
100
100
let wrappedProducer = success. producer
101
101
success. producer = { writer in
102
- let result : Result < Metadata , any Error > = await withTaskGroup ( of: TimeoutResult . self) { group in
102
+ try await withThrowingTaskGroup ( of: Metadata . self) { group in
103
103
group. addTask {
104
- do {
105
- try await Task . sleep ( for: duration, tolerance: . nanoseconds( 1 ) )
106
- } catch {
107
- return . cancelled
108
- }
109
- return . throw( error)
104
+ try await wrappedProducer ( writer)
110
105
}
111
106
112
- group. addTask {
113
- do {
114
- return . result( try await wrappedProducer ( writer) )
115
- } catch {
116
- return . throw( error)
117
- }
118
- }
119
-
120
- let first = await group. next ( ) !
121
107
group. cancelAll ( )
122
- let second = await group. next ( ) !
123
-
124
- switch ( first, second) {
125
- case ( . throw( let error) , _) :
126
- return . failure( error)
127
- case ( . result( let metadata) , _) :
128
- return . success( metadata)
129
- case ( . cancelled, _) :
130
- return . failure( CancellationError ( ) )
131
- }
108
+ _ = try await group. next ( ) !
109
+ throw error
132
110
}
133
-
134
- return try result. get ( )
135
111
}
136
112
137
113
response. accepted = . success( success)
0 commit comments