Skip to content

Commit 878b0de

Browse files
committed
GrpcErrorTransformer Added
1 parent a6b9485 commit 878b0de

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/src/server/handler.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import 'service.dart';
3131

3232
typedef ServiceLookup = Service? Function(String service);
3333
typedef GrpcErrorHandler = void Function(GrpcError error, StackTrace? trace);
34+
typedef GrpcErrorTransformer = GrpcError? Function(GrpcError error, StackTrace? trace);
3435

3536
/// Handles an incoming gRPC call.
3637
class ServerHandler extends ServiceCall {
@@ -40,6 +41,7 @@ class ServerHandler extends ServiceCall {
4041
final List<ServerInterceptor> _serverInterceptors;
4142
final CodecRegistry? _codecRegistry;
4243
final GrpcErrorHandler? _errorHandler;
44+
final GrpcErrorTransformer? _errorTransformer;
4345

4446
// ignore: cancel_subscriptions
4547
StreamSubscription<GrpcMessage>? _incomingSubscription;
@@ -89,6 +91,7 @@ class ServerHandler extends ServiceCall {
8991
X509Certificate? clientCertificate,
9092
InternetAddress? remoteAddress,
9193
GrpcErrorHandler? errorHandler,
94+
GrpcErrorTransformer? errorTransformer,
9295
this.onDataReceived,
9396
}) : _stream = stream,
9497
_serviceLookup = serviceLookup,
@@ -97,6 +100,7 @@ class ServerHandler extends ServiceCall {
97100
_clientCertificate = clientCertificate,
98101
_remoteAddress = remoteAddress,
99102
_errorHandler = errorHandler,
103+
_errorTransformer = errorTransformer,
100104
_serverInterceptors = serverInterceptors;
101105

102106
@override
@@ -458,6 +462,7 @@ class ServerHandler extends ServiceCall {
458462

459463
void _sendError(GrpcError error, [StackTrace? trace]) {
460464
_errorHandler?.call(error, trace);
465+
error = _errorTransformer?.call(error, trace) ?? error;
461466

462467
sendTrailers(
463468
status: error.code,

lib/src/server/server.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class ConnectionServer {
9090
final List<ServerInterceptor> _serverInterceptors;
9191
final CodecRegistry? _codecRegistry;
9292
final GrpcErrorHandler? _errorHandler;
93+
final GrpcErrorTransformer? _errorTransformer;
9394
final ServerKeepAliveOptions _keepAliveOptions;
9495

9596
@visibleForTesting
@@ -104,11 +105,13 @@ class ConnectionServer {
104105
List<ServerInterceptor> serverInterceptors = const <ServerInterceptor>[],
105106
CodecRegistry? codecRegistry,
106107
GrpcErrorHandler? errorHandler,
108+
GrpcErrorTransformer? errorTransformer,
107109
this._keepAliveOptions = const ServerKeepAliveOptions(),
108110
]) : _codecRegistry = codecRegistry,
109111
_interceptors = interceptors,
110112
_serverInterceptors = serverInterceptors,
111-
_errorHandler = errorHandler {
113+
_errorHandler = errorHandler,
114+
_errorTransformer = errorTransformer {
112115
for (final service in services) {
113116
_services[service.$name] = service;
114117
}
@@ -197,6 +200,7 @@ class Server extends ConnectionServer {
197200
super.interceptors,
198201
super.codecRegistry,
199202
super.errorHandler,
203+
super.errorTransformer,
200204
super.keepAlive,
201205
]);
202206

@@ -208,12 +212,14 @@ class Server extends ConnectionServer {
208212
List<ServerInterceptor> serverInterceptors = const <ServerInterceptor>[],
209213
CodecRegistry? codecRegistry,
210214
GrpcErrorHandler? errorHandler,
215+
GrpcErrorTransformer? errorTransformer,
211216
}) : super(
212217
services,
213218
interceptors,
214219
serverInterceptors,
215220
codecRegistry,
216221
errorHandler,
222+
errorTransformer,
217223
keepAliveOptions,
218224
);
219225

@@ -321,6 +327,7 @@ class Server extends ConnectionServer {
321327
// ignore: unnecessary_cast
322328
remoteAddress: remoteAddress as io_bits.InternetAddress?,
323329
errorHandler: _errorHandler,
330+
errorTransformer: _errorTransformer,
324331
onDataReceived: onDataReceived,
325332
)..handle();
326333
}

0 commit comments

Comments
 (0)