From 878b0de5ad139fc73190a640ca54b322f47a9959 Mon Sep 17 00:00:00 2001 From: momadvisor Date: Fri, 30 May 2025 23:36:35 +0900 Subject: [PATCH] GrpcErrorTransformer Added --- lib/src/server/handler.dart | 5 +++++ lib/src/server/server.dart | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/src/server/handler.dart b/lib/src/server/handler.dart index fb285c6d..0675618b 100644 --- a/lib/src/server/handler.dart +++ b/lib/src/server/handler.dart @@ -31,6 +31,7 @@ import 'service.dart'; typedef ServiceLookup = Service? Function(String service); typedef GrpcErrorHandler = void Function(GrpcError error, StackTrace? trace); +typedef GrpcErrorTransformer = GrpcError? Function(GrpcError error, StackTrace? trace); /// Handles an incoming gRPC call. class ServerHandler extends ServiceCall { @@ -40,6 +41,7 @@ class ServerHandler extends ServiceCall { final List _serverInterceptors; final CodecRegistry? _codecRegistry; final GrpcErrorHandler? _errorHandler; + final GrpcErrorTransformer? _errorTransformer; // ignore: cancel_subscriptions StreamSubscription? _incomingSubscription; @@ -89,6 +91,7 @@ class ServerHandler extends ServiceCall { X509Certificate? clientCertificate, InternetAddress? remoteAddress, GrpcErrorHandler? errorHandler, + GrpcErrorTransformer? errorTransformer, this.onDataReceived, }) : _stream = stream, _serviceLookup = serviceLookup, @@ -97,6 +100,7 @@ class ServerHandler extends ServiceCall { _clientCertificate = clientCertificate, _remoteAddress = remoteAddress, _errorHandler = errorHandler, + _errorTransformer = errorTransformer, _serverInterceptors = serverInterceptors; @override @@ -458,6 +462,7 @@ class ServerHandler extends ServiceCall { void _sendError(GrpcError error, [StackTrace? trace]) { _errorHandler?.call(error, trace); + error = _errorTransformer?.call(error, trace) ?? error; sendTrailers( status: error.code, diff --git a/lib/src/server/server.dart b/lib/src/server/server.dart index a58a3bdb..e53d3114 100644 --- a/lib/src/server/server.dart +++ b/lib/src/server/server.dart @@ -90,6 +90,7 @@ class ConnectionServer { final List _serverInterceptors; final CodecRegistry? _codecRegistry; final GrpcErrorHandler? _errorHandler; + final GrpcErrorTransformer? _errorTransformer; final ServerKeepAliveOptions _keepAliveOptions; @visibleForTesting @@ -104,11 +105,13 @@ class ConnectionServer { List serverInterceptors = const [], CodecRegistry? codecRegistry, GrpcErrorHandler? errorHandler, + GrpcErrorTransformer? errorTransformer, this._keepAliveOptions = const ServerKeepAliveOptions(), ]) : _codecRegistry = codecRegistry, _interceptors = interceptors, _serverInterceptors = serverInterceptors, - _errorHandler = errorHandler { + _errorHandler = errorHandler, + _errorTransformer = errorTransformer { for (final service in services) { _services[service.$name] = service; } @@ -197,6 +200,7 @@ class Server extends ConnectionServer { super.interceptors, super.codecRegistry, super.errorHandler, + super.errorTransformer, super.keepAlive, ]); @@ -208,12 +212,14 @@ class Server extends ConnectionServer { List serverInterceptors = const [], CodecRegistry? codecRegistry, GrpcErrorHandler? errorHandler, + GrpcErrorTransformer? errorTransformer, }) : super( services, interceptors, serverInterceptors, codecRegistry, errorHandler, + errorTransformer, keepAliveOptions, ); @@ -321,6 +327,7 @@ class Server extends ConnectionServer { // ignore: unnecessary_cast remoteAddress: remoteAddress as io_bits.InternetAddress?, errorHandler: _errorHandler, + errorTransformer: _errorTransformer, onDataReceived: onDataReceived, )..handle(); }