MCPcopy
hub / github.com/golang/protobuf / generateServerMethod

Method generateServerMethod

protoc-gen-go/grpc/grpc.go:440–521  ·  view source on GitHub ↗
(servName, fullServName string, method *pb.MethodDescriptorProto)

Source from the content-addressed store, hash-verified

438}
439
440func (g *grpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string {
441 methName := generator.CamelCase(method.GetName())
442 hname := fmt.Sprintf("_%s_%s_Handler", servName, methName)
443 inType := g.typeName(method.GetInputType())
444 outType := g.typeName(method.GetOutputType())
445
446 if !method.GetServerStreaming() && !method.GetClientStreaming() {
447 g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {")
448 g.P("in := new(", inType, ")")
449 g.P("if err := dec(in); err != nil { return nil, err }")
450 g.P("if interceptor == nil { return srv.(", servName, "Server).", methName, "(ctx, in) }")
451 g.P("info := &", grpcPkg, ".UnaryServerInfo{")
452 g.P("Server: srv,")
453 g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",")
454 g.P("}")
455 g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {")
456 g.P("return srv.(", servName, "Server).", methName, "(ctx, req.(*", inType, "))")
457 g.P("}")
458 g.P("return interceptor(ctx, in, info, handler)")
459 g.P("}")
460 g.P()
461 return hname
462 }
463 streamType := unexport(servName) + methName + "Server"
464 g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {")
465 if !method.GetClientStreaming() {
466 g.P("m := new(", inType, ")")
467 g.P("if err := stream.RecvMsg(m); err != nil { return err }")
468 g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})")
469 } else {
470 g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})")
471 }
472 g.P("}")
473 g.P()
474
475 genSend := method.GetServerStreaming()
476 genSendAndClose := !method.GetServerStreaming()
477 genRecv := method.GetClientStreaming()
478
479 // Stream auxiliary types and methods.
480 g.P("type ", servName, "_", methName, "Server interface {")
481 if genSend {
482 g.P("Send(*", outType, ") error")
483 }
484 if genSendAndClose {
485 g.P("SendAndClose(*", outType, ") error")
486 }
487 if genRecv {
488 g.P("Recv() (*", inType, ", error)")
489 }
490 g.P(grpcPkg, ".ServerStream")
491 g.P("}")
492 g.P()
493
494 g.P("type ", streamType, " struct {")
495 g.P(grpcPkg, ".ServerStream")
496 g.P("}")
497 g.P()

Callers 1

generateServiceMethod · 0.95

Calls 5

typeNameMethod · 0.95
PMethod · 0.95
CamelCaseFunction · 0.92
unexportFunction · 0.70
GetNameMethod · 0.45

Tested by

no test coverage detected