cmd/protoc-gen-go-grpc: call interceptor even if handler is unset (#3849)

This commit is contained in:
Doug Fawley
2020-08-26 16:05:36 -07:00
committed by GitHub
parent cc8e63cae1
commit d31b671000
18 changed files with 380 additions and 244 deletions

View File

@ -89,9 +89,6 @@ type SearchServiceService struct {
}
func (s *SearchServiceService) search(_ interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
if s.Search == nil {
return nil, status.Errorf(codes.Unimplemented, "method Search not implemented")
}
in := new(SearchRequest)
if err := dec(in); err != nil {
return nil, err
@ -109,9 +106,6 @@ func (s *SearchServiceService) search(_ interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func (s *SearchServiceService) streamingSearch(_ interface{}, stream grpc.ServerStream) error {
if s.StreamingSearch == nil {
return status.Errorf(codes.Unimplemented, "method StreamingSearch not implemented")
}
return s.StreamingSearch(&searchServiceStreamingSearchServer{stream})
}
@ -139,18 +133,29 @@ func (x *searchServiceStreamingSearchServer) Recv() (*SearchRequest, error) {
// RegisterSearchServiceService registers a service implementation with a gRPC server.
func RegisterSearchServiceService(s grpc.ServiceRegistrar, srv *SearchServiceService) {
srvCopy := *srv
if srvCopy.Search == nil {
srvCopy.Search = func(context.Context, *SearchRequest) (*SearchResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Search not implemented")
}
}
if srvCopy.StreamingSearch == nil {
srvCopy.StreamingSearch = func(SearchService_StreamingSearchServer) error {
return status.Errorf(codes.Unimplemented, "method StreamingSearch not implemented")
}
}
sd := grpc.ServiceDesc{
ServiceName: "grpc.testing.SearchService",
Methods: []grpc.MethodDesc{
{
MethodName: "Search",
Handler: srv.search,
Handler: srvCopy.search,
},
},
Streams: []grpc.StreamDesc{
{
StreamName: "StreamingSearch",
Handler: srv.streamingSearch,
Handler: srvCopy.streamingSearch,
ServerStreams: true,
ClientStreams: true,
},