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

Function genClientMethod

internal/gengogrpc/grpc.go:220–297  ·  internal/gengogrpc/grpc.go::genClientMethod
(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int)

Source from the content-addressed store, hash-verified

218}
219
220func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int) {
221 service := method.Parent
222 sname := fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.Desc.Name())
223
224 if method.Desc.Options().(*descriptorpb.MethodOptions).GetDeprecated() {
225 g.P(deprecationComment)
226 }
227 g.P("func (c *", unexport(service.GoName), "Client) ", clientSignature(g, method), "{")
228 if !method.Desc.IsStreamingServer() && !method.Desc.IsStreamingClient() {
229 g.P("out := new(", method.Output.GoIdent, ")")
230 g.P(`err := c.cc.Invoke(ctx, "`, sname, `", in, out, opts...)`)
231 g.P("if err != nil { return nil, err }")
232 g.P("return out, nil")
233 g.P("}")
234 g.P()
235 return
236 }
237 streamType := unexport(service.GoName) + method.GoName + "Client"
238 serviceDescVar := "_" + service.GoName + "_serviceDesc"
239 g.P("stream, err := c.cc.NewStream(ctx, &", serviceDescVar, ".Streams[", index, `], "`, sname, `", opts...)`)
240 g.P("if err != nil { return nil, err }")
241 g.P("x := &", streamType, "{stream}")
242 if !method.Desc.IsStreamingClient() {
243 g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
244 g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
245 }
246 g.P("return x, nil")
247 g.P("}")
248 g.P()
249
250 genSend := method.Desc.IsStreamingClient()
251 genRecv := method.Desc.IsStreamingServer()
252 genCloseAndRecv := !method.Desc.IsStreamingServer()
253
254 // Stream auxiliary types and methods.
255 g.P("type ", service.GoName, "_", method.GoName, "Client interface {")
256 if genSend {
257 g.P("Send(*", method.Input.GoIdent, ") error")
258 }
259 if genRecv {
260 g.P("Recv() (*", method.Output.GoIdent, ", error)")
261 }
262 if genCloseAndRecv {
263 g.P("CloseAndRecv() (*", method.Output.GoIdent, ", error)")
264 }
265 g.P(grpcPackage.Ident("ClientStream"))
266 g.P("}")
267 g.P()
268
269 g.P("type ", streamType, " struct {")
270 g.P(grpcPackage.Ident("ClientStream"))
271 g.P("}")
272 g.P()
273
274 if genSend {
275 g.P("func (x *", streamType, ") Send(m *", method.Input.GoIdent, ") error {")
276 g.P("return x.ClientStream.SendMsg(m)")
277 g.P("}")

Callers 1

genServiceFunction · 0.85

Calls 4

clientSignatureFunction · 0.85
unexportFunction · 0.70
NameMethod · 0.65
PMethod · 0.45

Tested by

no test coverage detected