@@ -310,6 +310,17 @@ func clientSignature(g *protogen.GeneratedFile, method *protogen.Method) string
310
310
return s
311
311
}
312
312
313
+ func clientStreamInterface (g * protogen.GeneratedFile , method * protogen.Method ) string {
314
+ typeParam := g .QualifiedGoIdent (method .Input .GoIdent ) + ", " + g .QualifiedGoIdent (method .Output .GoIdent )
315
+ if method .Desc .IsStreamingClient () && method .Desc .IsStreamingServer () {
316
+ return g .QualifiedGoIdent (grpcPackage .Ident ("BidiStreamClient" )) + "[" + typeParam + "]"
317
+ } else if method .Desc .IsStreamingClient () {
318
+ return g .QualifiedGoIdent (grpcPackage .Ident ("ClientStreamClient" )) + "[" + typeParam + "]"
319
+ } else { // i.e. if method.Desc.IsStreamingServer()
320
+ return g .QualifiedGoIdent (grpcPackage .Ident ("ServerStreamClient" )) + "[" + g .QualifiedGoIdent (method .Output .GoIdent ) + "]"
321
+ }
322
+ }
323
+
313
324
func genClientMethod (gen * protogen.Plugin , file * protogen.File , g * protogen.GeneratedFile , method * protogen.Method , index int ) {
314
325
service := method .Parent
315
326
fmSymbol := helper .formatFullMethodSymbol (service , method )
@@ -329,24 +340,16 @@ func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
329
340
return
330
341
}
331
342
332
- streamType := unexport (service .GoName ) + method .GoName + "Client"
333
- var streamInterface string
343
+ streamImpl := unexport (service .GoName ) + method .GoName + "Client"
334
344
if * useGenericStreams {
335
345
typeParam := g .QualifiedGoIdent (method .Input .GoIdent ) + ", " + g .QualifiedGoIdent (method .Output .GoIdent )
336
- streamType = g .QualifiedGoIdent (grpcPackage .Ident ("StreamClientImpl" )) + "[" + typeParam + "]"
337
- if method .Desc .IsStreamingClient () && method .Desc .IsStreamingServer () {
338
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("BidiStreamClient" )) + "[" + typeParam + "]"
339
- } else if method .Desc .IsStreamingClient () {
340
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("ClientStreamClient" )) + "[" + typeParam + "]"
341
- } else { // i.e. if method.Desc.IsStreamingServer()
342
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("ServerStreamClient" )) + "[" + g .QualifiedGoIdent (method .Output .GoIdent ) + "]"
343
- }
346
+ streamImpl = g .QualifiedGoIdent (grpcPackage .Ident ("StreamClientImpl" )) + "[" + typeParam + "]"
344
347
}
345
348
346
349
serviceDescVar := service .GoName + "_ServiceDesc"
347
350
g .P ("stream, err := c.cc.NewStream(ctx, &" , serviceDescVar , ".Streams[" , index , `], ` , fmSymbol , `, cOpts...)` )
348
351
g .P ("if err != nil { return nil, err }" )
349
- g .P ("x := &" , streamType , "{ClientStream: stream}" )
352
+ g .P ("x := &" , streamImpl , "{ClientStream: stream}" )
350
353
if ! method .Desc .IsStreamingClient () {
351
354
g .P ("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }" )
352
355
g .P ("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }" )
@@ -359,7 +362,7 @@ func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
359
362
if * useGenericStreams {
360
363
// Use a type alias so that the type name in the generated function
361
364
// signature can remain identical even while we swap out the implementation.
362
- g .P ("type " , service .GoName , "_" , method .GoName , "Client = " , streamInterface )
365
+ g .P ("type " , service .GoName , "_" , method .GoName , "Client = " , clientStreamInterface ( g , method ) )
363
366
g .P ()
364
367
return
365
368
}
@@ -382,27 +385,27 @@ func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
382
385
g .P ("}" )
383
386
g .P ()
384
387
385
- g .P ("type " , streamType , " struct {" )
388
+ g .P ("type " , streamImpl , " struct {" )
386
389
g .P (grpcPackage .Ident ("ClientStream" ))
387
390
g .P ("}" )
388
391
g .P ()
389
392
390
393
if genSend {
391
- g .P ("func (x *" , streamType , ") Send(m *" , method .Input .GoIdent , ") error {" )
394
+ g .P ("func (x *" , streamImpl , ") Send(m *" , method .Input .GoIdent , ") error {" )
392
395
g .P ("return x.ClientStream.SendMsg(m)" )
393
396
g .P ("}" )
394
397
g .P ()
395
398
}
396
399
if genRecv {
397
- g .P ("func (x *" , streamType , ") Recv() (*" , method .Output .GoIdent , ", error) {" )
400
+ g .P ("func (x *" , streamImpl , ") Recv() (*" , method .Output .GoIdent , ", error) {" )
398
401
g .P ("m := new(" , method .Output .GoIdent , ")" )
399
402
g .P ("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }" )
400
403
g .P ("return m, nil" )
401
404
g .P ("}" )
402
405
g .P ()
403
406
}
404
407
if genCloseAndRecv {
405
- g .P ("func (x *" , streamType , ") CloseAndRecv() (*" , method .Output .GoIdent , ", error) {" )
408
+ g .P ("func (x *" , streamImpl , ") CloseAndRecv() (*" , method .Output .GoIdent , ", error) {" )
406
409
g .P ("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }" )
407
410
g .P ("m := new(" , method .Output .GoIdent , ")" )
408
411
g .P ("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }" )
@@ -469,6 +472,17 @@ func genServiceDesc(file *protogen.File, g *protogen.GeneratedFile, serviceDescV
469
472
g .P ()
470
473
}
471
474
475
+ func serverStreamInterface (g * protogen.GeneratedFile , method * protogen.Method ) string {
476
+ typeParam := g .QualifiedGoIdent (method .Input .GoIdent ) + ", " + g .QualifiedGoIdent (method .Output .GoIdent )
477
+ if method .Desc .IsStreamingClient () && method .Desc .IsStreamingServer () {
478
+ return g .QualifiedGoIdent (grpcPackage .Ident ("BidiStreamServer" )) + "[" + typeParam + "]"
479
+ } else if method .Desc .IsStreamingClient () {
480
+ return g .QualifiedGoIdent (grpcPackage .Ident ("ClientStreamServer" )) + "[" + typeParam + "]"
481
+ } else { // i.e. if method.Desc.IsStreamingServer()
482
+ return g .QualifiedGoIdent (grpcPackage .Ident ("ServerStreamServer" )) + "[" + g .QualifiedGoIdent (method .Output .GoIdent ) + "]"
483
+ }
484
+ }
485
+
472
486
func genServerMethod (gen * protogen.Plugin , file * protogen.File , g * protogen.GeneratedFile , method * protogen.Method , hnameFuncNameFormatter func (string ) string ) string {
473
487
service := method .Parent
474
488
hname := fmt .Sprintf ("_%s_%s_Handler" , service .GoName , method .GoName )
@@ -492,27 +506,19 @@ func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
492
506
return hname
493
507
}
494
508
495
- streamType := unexport (service .GoName ) + method .GoName + "Server"
496
- var streamInterface string
509
+ streamImpl := unexport (service .GoName ) + method .GoName + "Server"
497
510
if * useGenericStreams {
498
511
typeParam := g .QualifiedGoIdent (method .Input .GoIdent ) + ", " + g .QualifiedGoIdent (method .Output .GoIdent )
499
- streamType = g .QualifiedGoIdent (grpcPackage .Ident ("StreamServerImpl" )) + "[" + typeParam + "]"
500
- if method .Desc .IsStreamingClient () && method .Desc .IsStreamingServer () {
501
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("BidiStreamServer" )) + "[" + typeParam + "]"
502
- } else if method .Desc .IsStreamingClient () {
503
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("ClientStreamServer" )) + "[" + typeParam + "]"
504
- } else { // i.e. if method.Desc.IsStreamingServer()
505
- streamInterface = g .QualifiedGoIdent (grpcPackage .Ident ("ServerStreamServer" )) + "[" + g .QualifiedGoIdent (method .Output .GoIdent ) + "]"
506
- }
512
+ streamImpl = g .QualifiedGoIdent (grpcPackage .Ident ("StreamServerImpl" )) + "[" + typeParam + "]"
507
513
}
508
514
509
515
g .P ("func " , hnameFuncNameFormatter (hname ), "(srv interface{}, stream " , grpcPackage .Ident ("ServerStream" ), ") error {" )
510
516
if ! method .Desc .IsStreamingClient () {
511
517
g .P ("m := new(" , method .Input .GoIdent , ")" )
512
518
g .P ("if err := stream.RecvMsg(m); err != nil { return err }" )
513
- g .P ("return srv.(" , service .GoName , "Server)." , method .GoName , "(m, &" , streamType , "{ServerStream: stream})" )
519
+ g .P ("return srv.(" , service .GoName , "Server)." , method .GoName , "(m, &" , streamImpl , "{ServerStream: stream})" )
514
520
} else {
515
- g .P ("return srv.(" , service .GoName , "Server)." , method .GoName , "(&" , streamType , "{ServerStream: stream})" )
521
+ g .P ("return srv.(" , service .GoName , "Server)." , method .GoName , "(&" , streamImpl , "{ServerStream: stream})" )
516
522
}
517
523
g .P ("}" )
518
524
g .P ()
@@ -521,7 +527,7 @@ func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
521
527
if * useGenericStreams {
522
528
// Use a type alias so that the type name in the generated function
523
529
// signature can remain identical even while we swap out the implementation.
524
- g .P ("type " , service .GoName , "_" , method .GoName , "Server = " , streamInterface )
530
+ g .P ("type " , service .GoName , "_" , method .GoName , "Server = " , serverStreamInterface ( g , method ) )
525
531
g .P ()
526
532
return hname
527
533
}
@@ -544,25 +550,25 @@ func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.Gene
544
550
g .P ("}" )
545
551
g .P ()
546
552
547
- g .P ("type " , streamType , " struct {" )
553
+ g .P ("type " , streamImpl , " struct {" )
548
554
g .P (grpcPackage .Ident ("ServerStream" ))
549
555
g .P ("}" )
550
556
g .P ()
551
557
552
558
if genSend {
553
- g .P ("func (x *" , streamType , ") Send(m *" , method .Output .GoIdent , ") error {" )
559
+ g .P ("func (x *" , streamImpl , ") Send(m *" , method .Output .GoIdent , ") error {" )
554
560
g .P ("return x.ServerStream.SendMsg(m)" )
555
561
g .P ("}" )
556
562
g .P ()
557
563
}
558
564
if genSendAndClose {
559
- g .P ("func (x *" , streamType , ") SendAndClose(m *" , method .Output .GoIdent , ") error {" )
565
+ g .P ("func (x *" , streamImpl , ") SendAndClose(m *" , method .Output .GoIdent , ") error {" )
560
566
g .P ("return x.ServerStream.SendMsg(m)" )
561
567
g .P ("}" )
562
568
g .P ()
563
569
}
564
570
if genRecv {
565
- g .P ("func (x *" , streamType , ") Recv() (*" , method .Input .GoIdent , ", error) {" )
571
+ g .P ("func (x *" , streamImpl , ") Recv() (*" , method .Input .GoIdent , ", error) {" )
566
572
g .P ("m := new(" , method .Input .GoIdent , ")" )
567
573
g .P ("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }" )
568
574
g .P ("return m, nil" )
0 commit comments