(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int)
| 218 | } |
| 219 | |
| 220 | func 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("}") |
no test coverage detected