File tree Expand file tree Collapse file tree 3 files changed +26
-13
lines changed Expand file tree Collapse file tree 3 files changed +26
-13
lines changed Original file line number Diff line number Diff line change @@ -26,7 +26,7 @@ internal enum ClientStreamExecutor {
26
26
/// - attempt: The attempt number for the RPC that will be executed.
27
27
/// - serializer: A request serializer.
28
28
/// - deserializer: A response deserializer.
29
- /// - stream: The stream to excecute the RPC on.
29
+ /// - stream: The stream to execute the RPC on.
30
30
/// - Returns: A streamed response.
31
31
@inlinable
32
32
static func execute< Input: Sendable , Output: Sendable , Bytes: GRPCContiguousBytes > (
@@ -95,12 +95,8 @@ internal enum ClientStreamExecutor {
95
95
let result = await Result {
96
96
try await stream. write ( . metadata( request. metadata) )
97
97
try await request. producer ( . map( into: stream) { . message( try serializer. serialize ( $0) ) } )
98
- } . castError ( to: RPCError . self) { other in
99
- if let convertible = other as? any RPCErrorConvertible {
100
- RPCError ( convertible)
101
- } else {
102
- RPCError ( code: . unknown, message: " Write failed. " , cause: other)
103
- }
98
+ } . castOrConvertRPCError { other in
99
+ RPCError ( code: . unknown, message: " Write failed. " , cause: other)
104
100
}
105
101
106
102
switch result {
Original file line number Diff line number Diff line change @@ -213,12 +213,8 @@ struct ServerRPCExecutor {
213
213
return try await contents. producer (
214
214
. serializingToRPCResponsePart( into: outbound, with: serializer)
215
215
)
216
- } . castError ( to: RPCError . self) { error in
217
- if let convertible = error as? ( any RPCErrorConvertible ) {
218
- return RPCError ( convertible)
219
- } else {
220
- return RPCError ( code: . unknown, message: " " , cause: error)
221
- }
216
+ } . castOrConvertRPCError { error in
217
+ RPCError ( code: . unknown, message: " " , cause: error)
222
218
}
223
219
224
220
switch result {
Original file line number Diff line number Diff line change @@ -45,4 +45,25 @@ extension Result {
45
45
return ( error as? NewError ) ?? buildError ( error)
46
46
}
47
47
}
48
+
49
+ /// Attempt to map or convert the error to an `RPCError`.
50
+ ///
51
+ /// If the cast or conversion is not possible then the provided closure is used to create an error of the given type.
52
+ ///
53
+ /// - Parameter buildError: A closure which constructs the desired error if conversion is not possible.
54
+ @inlinable
55
+ @available ( gRPCSwift 2 . 0 , * )
56
+ func castOrConvertRPCError(
57
+ or buildError: ( any Error ) -> RPCError
58
+ ) -> Result < Success , RPCError > {
59
+ return self . mapError { error in
60
+ if let rpcError = error as? RPCError {
61
+ return rpcError
62
+ } else if let convertibleError = error as? any RPCErrorConvertible {
63
+ return RPCError ( convertibleError)
64
+ } else {
65
+ return buildError ( error)
66
+ }
67
+ }
68
+ }
48
69
}
You can’t perform that action at this time.
0 commit comments