Skip to content

Commit 2657a4d

Browse files
authored
Set let require_unimplemented_servers default to true when generating code from .proto files (#37737)
* Remove `require_unimplemented_servers=false` option when generating code from proto files. Run `make protobuf`. This allows require_unimplemented_servers to default to true, and the generated code shows the impacts of that. * Update generator script to embed 'UnimplementedFoobarServer' structs and skip generating code for the `mustEmbedUnimplementedFoobarServer` method that is implemented via that embedding. * Run `make generate` * Embed UnimplementedProviderServer into implementations of ProviderServer * Embed UnimplementedProvisionerServer into implementations of ProvisionerServer
1 parent 6b17cfe commit 2657a4d

File tree

16 files changed

+57
-27
lines changed

16 files changed

+57
-27
lines changed

internal/cloudplugin/cloudproto1/cloudproto1_grpc.pb.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/grpcwrap/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ type provider struct {
3434
provider providers.Interface
3535
schema providers.GetProviderSchemaResponse
3636
identitySchemas providers.GetResourceIdentitySchemasResponse
37+
38+
tfplugin5.UnimplementedProviderServer
3739
}
3840

3941
func (p *provider) GetMetadata(_ context.Context, req *tfplugin5.GetMetadata_Request) (*tfplugin5.GetMetadata_Response, error) {

internal/grpcwrap/provider6.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ type provider6 struct {
3535
provider providers.Interface
3636
schema providers.GetProviderSchemaResponse
3737
identitySchemas providers.GetResourceIdentitySchemasResponse
38+
39+
tfplugin6.UnimplementedProviderServer
3840
}
3941

4042
func (p *provider6) GetMetadata(_ context.Context, req *tfplugin6.GetMetadata_Request) (*tfplugin6.GetMetadata_Response, error) {

internal/grpcwrap/provisioner.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ func Provisioner(p provisioners.Interface) tfplugin5.ProvisionerServer {
2929
type provisioner struct {
3030
provisioner provisioners.Interface
3131
schema *configschema.Block
32+
33+
tfplugin5.UnimplementedProvisionerServer
3234
}
3335

3436
func (p *provisioner) GetSchema(_ context.Context, req *tfplugin5.GetProvisionerSchema_Request) (*tfplugin5.GetProvisionerSchema_Response, error) {

internal/rpcapi/dynrpcserver/dependencies.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/rpcapi/dynrpcserver/generator/main.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ func main() {
125125
fmt.Fprintf(&buf, "type %s struct {\n", baseName)
126126
fmt.Fprintf(&buf, "impl %s.%s\n", shortName, ifaceName)
127127
fmt.Fprintln(&buf, "mu sync.RWMutex")
128+
129+
unimplementedServerInterface := fmt.Sprintf("%s.Unimplemented%s", shortName, ifaceName) // UnimplementedFoobarServer struct name that's generated from the proto file.
130+
unimplementedServerMethod := fmt.Sprintf("mustEmbedUnimplemented%s", ifaceName) // Name of the method implemented on UnimplementedFoobarServer.
131+
fmt.Fprintln(&buf, unimplementedServerInterface) // Embed UnimplementedFoobarServer struct into the struct we're generating.
132+
128133
buf.WriteString("}\n\n")
129134

130135
fmt.Fprintf(&buf, "var _ %s.%s = (*%s)(nil)\n\n", shortName, ifaceName, baseName)
@@ -135,6 +140,13 @@ func main() {
135140

136141
for i := 0; i < iface.NumMethods(); i++ {
137142
method := iface.Method(i)
143+
144+
if method.Name() == unimplementedServerMethod {
145+
// Code for this method doesn't need to be generated.
146+
// The method is present via embedding, see use of `unimplementedServerInterface` above.
147+
continue
148+
}
149+
138150
sig := method.Type().(*types.Signature)
139151

140152
fmt.Fprintf(&buf, "func (s *%s) %s(", baseName, method.Name())

internal/rpcapi/dynrpcserver/packages.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/rpcapi/dynrpcserver/stacks.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/rpcapi/terraform1/dependencies/dependencies_grpc.pb.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/rpcapi/terraform1/packages/packages_grpc.pb.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)