Because Prost requires specific toolchain definitions to avoid dependency mismatches, you should define a custom toolchain. It is recommended to place this in a dedicated directory like tools/prost_toolchain/BUILD.bazel.
The toolchain definition requires:
rust_library_group for prost_runtime and tonic_runtime.rust_prost_toolchain to link the plugins (protoc-gen-prost, protoc-gen-tonic), the proto compiler, and the runtimes.- A
toolchain rule that maps the implementation to the @rules_rust_prost//:toolchain_type.
load("@rules_rust_prost//:defs.bzl", "rust_prost_toolchain")
load("@rules_rust//rust:defs.bzl", "rust_library_group")
rust_library_group(
name = "prost_runtime",
deps = ["@crates//prost"],
)
rust_library_group(
name = "tonic_runtime",
deps = [
":prost_runtime",
"@crates//tonic",
],
)
rust_prost_toolchain(
name = "prost_toolchain_impl",
prost_plugin = "@crates//protoc-gen-prost__protoc-gen-prost",
prost_runtime = ":prost_runtime",
prost_types = "@crates//prost-types",
proto_compiler = "@protobuf//:protoc",
tonic_plugin = "@crates//protoc-gen-tonic__protoc-gen-tonic",
tonic_runtime = ":tonic_runtime",
)
toolchain(
name = "prost_toolchain",
toolchain = "prost_toolchain_impl",
toolchain_type = "@rules_rust_prost//:toolchain_type",
)