From ae6e490773ec4e7b25f57ad7f20260a6569696d1 Mon Sep 17 00:00:00 2001 From: Josh Humphries Date: Fri, 23 Apr 2021 17:08:01 -0400 Subject: [PATCH] strictly backwards compatible alternative --- reflection/serverreflection.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/reflection/serverreflection.go b/reflection/serverreflection.go index 82a5ba7f2444..ee31f1d8cca6 100644 --- a/reflection/serverreflection.go +++ b/reflection/serverreflection.go @@ -54,19 +54,17 @@ import ( "google.golang.org/grpc/status" ) -// GRPCServer is the interface provided by a gRPC server. It is implemented by -// *grpc.Server, but could also be implemented by other concrete types. It acts -// as a registry, for accumulating the services exposed by the server. -type GRPCServer interface { +// ServiceRegistrar acts as a registry of exposed gRPC service. It is also an +// interface provided by a gRPC server (*grpc.Server). +type ServiceRegistrar interface { grpc.ServiceRegistrar + // GetServiceInfo returns information on the services registered thus far. GetServiceInfo() map[string]grpc.ServiceInfo } -var _ GRPCServer = (*grpc.Server)(nil) - type serverReflectionServer struct { rpb.UnimplementedServerReflectionServer - s GRPCServer + s ServiceRegistrar initSymbols sync.Once serviceNames []string @@ -74,7 +72,12 @@ type serverReflectionServer struct { } // Register registers the server reflection service on the given gRPC server. -func Register(s GRPCServer) { +func Register(s *grpc.Server) { + RegisterWithRegistrar(s) +} + +// RegisterWithRegistrar registers the server reflection service on the given service registrar. +func RegisterWithRegistrar(s ServiceRegistrar) { rpb.RegisterServerReflectionServer(s, &serverReflectionServer{ s: s, })