(pkg, reqServ, servName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string)
| 297 | } |
| 298 | |
| 299 | func (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 | } |
no test coverage detected