@@ -48,7 +48,7 @@ import (
48
48
// It is incremented whenever an incompatibility between the generated code and
49
49
// the grpc package is introduced; the generated code references
50
50
// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion).
51
- const generatedCodeVersion = 1
51
+ const generatedCodeVersion = 2
52
52
53
53
// Paths for packages used by code generated in this file,
54
54
// relative to the import_prefix of the generator.Generator.
@@ -218,7 +218,7 @@ func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.Servi
218
218
// Server handler implementations.
219
219
var handlerNames []string
220
220
for _ , method := range service .Method {
221
- hname := g .generateServerMethod (servName , method )
221
+ hname := g .generateServerMethod (servName , fullServName , method )
222
222
handlerNames = append (handlerNames , hname )
223
223
}
224
224
@@ -378,19 +378,25 @@ func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescrip
378
378
return methName + "(" + strings .Join (reqArgs , ", " ) + ") " + ret
379
379
}
380
380
381
- func (g * grpc ) generateServerMethod (servName string , method * pb.MethodDescriptorProto ) string {
381
+ func (g * grpc ) generateServerMethod (servName , fullServName string , method * pb.MethodDescriptorProto ) string {
382
382
methName := generator .CamelCase (method .GetName ())
383
383
hname := fmt .Sprintf ("_%s_%s_Handler" , servName , methName )
384
384
inType := g .typeName (method .GetInputType ())
385
385
outType := g .typeName (method .GetOutputType ())
386
386
387
387
if ! method .GetServerStreaming () && ! method .GetClientStreaming () {
388
- g .P ("func " , hname , "(srv interface{}, ctx " , contextPkg , ".Context, dec func(interface{}) error) (interface{}, error) {" )
388
+ g .P ("func " , hname , "(srv interface{}, ctx " , contextPkg , ".Context, dec func(interface{}) error, interceptor " , grpcPkg , ".UnaryServerInterceptor ) (interface{}, error) {" )
389
389
g .P ("in := new(" , inType , ")" )
390
390
g .P ("if err := dec(in); err != nil { return nil, err }" )
391
- g .P ("out, err := srv.(" , servName , "Server)." , methName , "(ctx, in)" )
392
- g .P ("if err != nil { return nil, err }" )
393
- g .P ("return out, nil" )
391
+ g .P ("if interceptor == nil { return srv.(" , servName , "Server)." , methName , "(ctx, in) }" )
392
+ g .P ("info := &grpc.UnaryServerInfo{" )
393
+ g .P ("Server: srv," )
394
+ g .P ("FullMethod: " , strconv .Quote (fmt .Sprintf ("/%s/%s" , fullServName , methName )), "," )
395
+ g .P ("}" )
396
+ g .P ("handler := func(ctx " , contextPkg , ".Context, req interface{}) (interface{}, error) {" )
397
+ g .P ("return srv.(" , servName , "Server)." , methName , "(ctx, req.(*" , inType , "))" )
398
+ g .P ("}" )
399
+ g .P ("return interceptor(ctx, in, info, handler)" )
394
400
g .P ("}" )
395
401
g .P ()
396
402
return hname
0 commit comments