use std::path::PathBuf;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let proto_root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("proto");
println!("cargo:rerun-if-changed=proto");
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_SERVER");
let build_server = std::env::var_os("CARGO_FEATURE_SERVER").is_some();
let protoc = protoc_bin_vendored::protoc_bin_path()?;
unsafe {
std::env::set_var("PROTOC", &protoc);
}
let mut protos = Vec::new();
for entry in walkdir::WalkDir::new(&proto_root) {
let entry = entry?;
if entry.file_type().is_file() && entry.path().extension().is_some_and(|ext| ext == "proto")
{
protos.push(entry.path().to_path_buf());
}
}
protos.sort();
tonic_prost_build::configure()
.build_server(build_server)
.build_client(true)
.compile_protos(&protos, &[proto_root])?;
Ok(())
}