(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string)
| 324 | } |
| 325 | |
| 326 | func (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 {") |
no test coverage detected