protoc-gen-go/grpc: inline errUnimplemented function (#818)
Avoid using an errUnimplemented function, which requires us to
give a name to it, causing possible conflicts.
Instead, just inline it's functionality.
diff --git a/protoc-gen-go/grpc/grpc.go b/protoc-gen-go/grpc/grpc.go
index 9266fba..7d05dac 100644
--- a/protoc-gen-go/grpc/grpc.go
+++ b/protoc-gen-go/grpc/grpc.go
@@ -118,10 +118,6 @@
g.P("var _ ", contextPkg, ".Context")
g.P("var _ ", grpcPkg, ".ClientConn")
g.P()
- g.P("func errUnimplemented(methodName string) error {")
- g.P("\treturn ", errorPkg, ".Errorf(codes.Unimplemented, \"method %s not implemented\", methodName)")
- g.P("}")
- g.P()
// Assert version compatibility.
g.P("// This is a compile-time assertion to ensure that this generated file")
@@ -294,23 +290,22 @@
g.P()
// Unimplemented<service_name>Server's concrete methods
for _, method := range service.Method {
- g.P(g.generateServerMethodConcrete(servName, method))
+ g.generateServerMethodConcrete(servName, method)
}
g.P()
}
// generateServerMethodConcrete returns unimplemented methods which ensure forward compatibility
-func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDescriptorProto) string {
+func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDescriptorProto) {
header := g.generateServerSignatureWithParamNames(servName, method)
- implementation := fmt.Sprintf("func (*Unimplemented%sServer) %s {\n", servName, header)
- implementation += fmt.Sprintf("\treturn ")
+ g.P("func (*Unimplemented", servName, "Server) ", header, " {")
+ var nilArg string
if !method.GetServerStreaming() && !method.GetClientStreaming() {
- implementation += "nil, "
+ nilArg = "nil, "
}
- origMethName := method.GetName()
- methName := generator.CamelCase(origMethName)
- implementation += fmt.Sprintf("errUnimplemented(%q)\n}", methName)
- return implementation
+ methName := generator.CamelCase(method.GetName())
+ g.P("return ", nilArg, errorPkg, `.Errorf(codes.Unimplemented, "method `, methName, ` not implemented")`)
+ g.P("}")
}
// generateClientSignature returns the client-side signature for a method.
diff --git a/protoc-gen-go/testdata/deprecated/deprecated.pb.go b/protoc-gen-go/testdata/deprecated/deprecated.pb.go
index 9268b4c..2515c99 100644
--- a/protoc-gen-go/testdata/deprecated/deprecated.pb.go
+++ b/protoc-gen-go/testdata/deprecated/deprecated.pb.go
@@ -196,10 +196,6 @@
var _ context.Context
var _ grpc.ClientConn
-func errUnimplemented(methodName string) error {
- return status.Errorf(codes.Unimplemented, "method %s not implemented", methodName)
-}
-
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
@@ -247,7 +243,7 @@
}
func (*UnimplementedDeprecatedServiceServer) DeprecatedCall(ctx context.Context, req *DeprecatedRequest) (*DeprecatedResponse, error) {
- return nil, errUnimplemented("DeprecatedCall")
+ return nil, status.Errorf(codes.Unimplemented, "method DeprecatedCall not implemented")
}
// Deprecated: Do not use.
diff --git a/protoc-gen-go/testdata/grpc/grpc.pb.go b/protoc-gen-go/testdata/grpc/grpc.pb.go
index 871ae72..76c9a20 100644
--- a/protoc-gen-go/testdata/grpc/grpc.pb.go
+++ b/protoc-gen-go/testdata/grpc/grpc.pb.go
@@ -181,10 +181,6 @@
var _ context.Context
var _ grpc.ClientConn
-func errUnimplemented(methodName string) error {
- return status.Errorf(codes.Unimplemented, "method %s not implemented", methodName)
-}
-
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
@@ -332,16 +328,16 @@
}
func (*UnimplementedTestServer) UnaryCall(ctx context.Context, req *SimpleRequest) (*SimpleResponse, error) {
- return nil, errUnimplemented("UnaryCall")
+ return nil, status.Errorf(codes.Unimplemented, "method UnaryCall not implemented")
}
func (*UnimplementedTestServer) Downstream(req *SimpleRequest, srv Test_DownstreamServer) error {
- return errUnimplemented("Downstream")
+ return status.Errorf(codes.Unimplemented, "method Downstream not implemented")
}
func (*UnimplementedTestServer) Upstream(srv Test_UpstreamServer) error {
- return errUnimplemented("Upstream")
+ return status.Errorf(codes.Unimplemented, "method Upstream not implemented")
}
func (*UnimplementedTestServer) Bidi(srv Test_BidiServer) error {
- return errUnimplemented("Bidi")
+ return status.Errorf(codes.Unimplemented, "method Bidi not implemented")
}
func RegisterTestServer(s *grpc.Server, srv TestServer) {