MCPcopy
hub / github.com/gogo/protobuf / generateClientMethod

Method generateClientMethod

protoc-gen-gogo/grpc/grpc.go:326–405  ·  view source on GitHub ↗
(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string)

Source from the content-addressed store, hash-verified

324}
325
326func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
327 sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName())
328 methName := generator.CamelCase(method.GetName())
329 inType := g.typeName(method.GetInputType())
330 outType := g.typeName(method.GetOutputType())
331
332 if method.GetOptions().GetDeprecated() {
333 g.P(deprecationComment)
334 }
335 g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{")
336 if !method.GetServerStreaming() && !method.GetClientStreaming() {
337 g.P("out := new(", outType, ")")
338 // TODO: Pass descExpr to Invoke.
339 g.P(`err := c.cc.Invoke(ctx, "`, sname, `", in, out, opts...)`)
340 g.P("if err != nil { return nil, err }")
341 g.P("return out, nil")
342 g.P("}")
343 g.P()
344 return
345 }
346 streamType := unexport(servName) + methName + "Client"
347 g.P("stream, err := c.cc.NewStream(ctx, ", descExpr, `, "`, sname, `", opts...)`)
348 g.P("if err != nil { return nil, err }")
349 g.P("x := &", streamType, "{stream}")
350 if !method.GetClientStreaming() {
351 g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
352 g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
353 }
354 g.P("return x, nil")
355 g.P("}")
356 g.P()
357
358 genSend := method.GetClientStreaming()
359 genRecv := method.GetServerStreaming()
360 genCloseAndRecv := !method.GetServerStreaming()
361
362 // Stream auxiliary types and methods.
363 g.P("type ", servName, "_", methName, "Client interface {")
364 if genSend {
365 g.P("Send(*", inType, ") error")
366 }
367 if genRecv {
368 g.P("Recv() (*", outType, ", error)")
369 }
370 if genCloseAndRecv {
371 g.P("CloseAndRecv() (*", outType, ", error)")
372 }
373 g.P(grpcPkg, ".ClientStream")
374 g.P("}")
375 g.P()
376
377 g.P("type ", streamType, " struct {")
378 g.P(grpcPkg, ".ClientStream")
379 g.P("}")
380 g.P()
381
382 if genSend {
383 g.P("func (x *", streamType, ") Send(m *", inType, ") error {")

Callers 1

generateServiceMethod · 0.95

Calls 12

typeNameMethod · 0.95
PMethod · 0.95
CamelCaseFunction · 0.92
unexportFunction · 0.85
GetInputTypeMethod · 0.80
GetOutputTypeMethod · 0.80
GetServerStreamingMethod · 0.80
GetClientStreamingMethod · 0.80
GetNameMethod · 0.65
GetDeprecatedMethod · 0.45
GetOptionsMethod · 0.45

Tested by

no test coverage detected