pub fn protoc(version: &str, out_dir: &Path) -> Result<PathBuf>
Expand description

Downloads an official release of the protobuf compiler (protoc) and returns the path to it.

The release archive matching the given version will be downloaded, and the protoc binary will be extracted into a subdirectory of out_dir. You can choose a version from the release page, for example “21.2”. Don’t prefix it with a “v”.

out_dir can be anywhere you want, but if calling this function from a build script, you should probably use the OUT_DIR env var (which is set by Cargo automatically for build scripts).

A previously downloaded protoc binary of the correct version will be reused if already present in out_dir.

Examples:

// From within build.rs...
let out_dir = env::var("OUT_DIR").unwrap();
let protoc_path = protoc_fetcher::protoc("21.2", Path::new(&out_dir));

If you are using tonic-build (or prost-build), you can instruct it to use the fetched protoc binary by setting the PROTOC env var.

env::set_var("PROTOC", &protoc_path);
tonic_build::compile_protos(path_to_my_protos);