Merge "rust: Fix GRPC generator invocation" am: 40c9798e92 am: 13a4ae9c7b

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1489600

Change-Id: Ifd72ec42c389b0b9feeb717779f6b4b02de63942
diff --git a/rust/protobuf.go b/rust/protobuf.go
index 28a4597..ca40154 100644
--- a/rust/protobuf.go
+++ b/rust/protobuf.go
@@ -55,17 +55,17 @@
 
 func (proto *protobufDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) android.Path {
 	var protoFlags android.ProtoFlags
-	var pluginPath android.Path
+	var pluginPaths android.Paths
 
 	protoFlags.OutTypeFlag = "--rust_out"
 	outDir := android.PathForModuleOut(ctx)
 
-	pluginPath, protoFlags = proto.setupPlugin(ctx, protoFlags, outDir)
+	pluginPaths, protoFlags = proto.setupPlugin(ctx, protoFlags, outDir)
 
 	protoFlags.Flags = append(protoFlags.Flags, defaultProtobufFlags...)
 	protoFlags.Flags = append(protoFlags.Flags, proto.Properties.Proto_flags...)
 
-	protoFlags.Deps = append(protoFlags.Deps, pluginPath)
+	protoFlags.Deps = append(protoFlags.Deps, pluginPaths...)
 
 	protoFile := android.OptionalPathForModuleSrc(ctx, proto.Properties.Proto)
 	if !protoFile.Valid() {
@@ -90,21 +90,25 @@
 	return modFile
 }
 
-func (proto *protobufDecorator) setupPlugin(ctx ModuleContext, protoFlags android.ProtoFlags, outDir android.ModuleOutPath) (android.Path, android.ProtoFlags) {
-	var pluginPath android.Path
+func (proto *protobufDecorator) setupPlugin(ctx ModuleContext, protoFlags android.ProtoFlags, outDir android.ModuleOutPath) (android.Paths, android.ProtoFlags) {
+	pluginPaths := []android.Path{}
 
 	if proto.plugin == Protobuf {
-		pluginPath = ctx.Config().HostToolPath(ctx, "protoc-gen-rust")
+		pluginPath := ctx.Config().HostToolPath(ctx, "protoc-gen-rust")
+		pluginPaths = append(pluginPaths, pluginPath)
 		protoFlags.Flags = append(protoFlags.Flags, "--plugin="+pluginPath.String())
 	} else if proto.plugin == Grpc {
-		pluginPath = ctx.Config().HostToolPath(ctx, "grpc_rust_plugin")
+		grpcPath := ctx.Config().HostToolPath(ctx, "grpc_rust_plugin")
+		protobufPath := ctx.Config().HostToolPath(ctx, "protoc-gen-rust")
+		pluginPaths = append(pluginPaths, grpcPath, protobufPath)
 		protoFlags.Flags = append(protoFlags.Flags, "--grpc_out="+outDir.String())
-		protoFlags.Flags = append(protoFlags.Flags, "--plugin=protoc-gen-grpc="+pluginPath.String())
+		protoFlags.Flags = append(protoFlags.Flags, "--plugin=protoc-gen-grpc="+grpcPath.String())
+		protoFlags.Flags = append(protoFlags.Flags, "--plugin=protoc-gen-rust="+protobufPath.String())
 	} else {
 		ctx.ModuleErrorf("Unknown protobuf plugin type requested")
 	}
 
-	return pluginPath, protoFlags
+	return pluginPaths, protoFlags
 }
 
 func (proto *protobufDecorator) SourceProviderProps() []interface{} {