MCPcopy
hub / github.com/micro/go-micro / generateClientMethod

Method generateClientMethod

cmd/protoc-gen-micro/plugin/micro/micro.go:299–412  ·  view source on GitHub ↗
(pkg, reqServ, servName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string)

Source from the content-addressed store, hash-verified

297}
298
299func (g *micro) generateClientMethod(pkg, reqServ, servName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
300 reqMethod := fmt.Sprintf("%s.%s", servName, method.GetName())
301 useGrpc := g.gen.Param["use_grpc"]
302 if useGrpc != "" {
303 reqMethod = fmt.Sprintf("/%s.%s/%s", pkg, servName, method.GetName())
304 }
305 methName := generator.CamelCase(method.GetName())
306 inType := g.typeName(method.GetInputType())
307 outType := g.typeName(method.GetOutputType())
308
309 servAlias := servName + "Service"
310
311 // strip suffix
312 if strings.HasSuffix(servAlias, "ServiceService") {
313 servAlias = strings.TrimSuffix(servAlias, "Service")
314 }
315
316 g.P("func (c *", unexport(servAlias), ") ", g.generateClientSignature(servName, method), "{")
317 if !method.GetServerStreaming() && !method.GetClientStreaming() {
318 g.P(`req := c.c.NewRequest(c.name, "`, reqMethod, `", in)`)
319 g.P("out := new(", outType, ")")
320 // TODO: Pass descExpr to Invoke.
321 g.P("err := ", `c.c.Call(ctx, req, out, opts...)`)
322 g.P("if err != nil { return nil, err }")
323 g.P("return out, nil")
324 g.P("}")
325 g.P()
326 return
327 }
328 streamType := unexport(servAlias) + methName
329 g.P(`req := c.c.NewRequest(c.name, "`, reqMethod, `", &`, inType, `{})`)
330 g.P("stream, err := c.c.Stream(ctx, req, opts...)")
331 g.P("if err != nil { return nil, err }")
332
333 if !method.GetClientStreaming() {
334 g.P("if err := stream.Send(in); err != nil { return nil, err }")
335 // TODO: currently only grpc support CloseSend
336 // g.P("if err := stream.CloseSend(); err != nil { return nil, err }")
337 }
338
339 g.P("return &", streamType, "{stream}, nil")
340 g.P("}")
341 g.P()
342
343 genSend := method.GetClientStreaming()
344 genRecv := method.GetServerStreaming()
345
346 // Stream auxiliary types and methods.
347 g.P("type ", servName, "_", methName, "Service interface {")
348 g.P("Context() context.Context")
349 g.P("SendMsg(interface{}) error")
350 g.P("RecvMsg(interface{}) error")
351 g.P("CloseSend() error")
352 g.P("Close() error")
353
354 if genSend {
355 g.P("Send(*", inType, ") error")
356 }

Callers 1

generateServiceMethod · 0.95

Calls 6

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

Tested by

no test coverage detected