use std::{env, fs, path::PathBuf};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let protoc = protoc_bin_vendored::protoc_bin_path()?;
unsafe { env::set_var("PROTOC", protoc) };
let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?);
let proto_root = root.join("proto");
let package_root = proto_root.join("heddle/api/v1alpha1");
let mut protos = fs::read_dir(&package_root)?
.filter_map(Result::ok)
.map(|entry| entry.path())
.filter(|path| {
path.extension()
.is_some_and(|extension| extension == "proto")
})
.collect::<Vec<_>>();
protos.sort();
let descriptor = PathBuf::from(env::var("OUT_DIR")?).join("heddle_api_descriptor.bin");
println!("cargo:rerun-if-changed={}", package_root.display());
tonic_prost_build::configure()
.build_client(env::var_os("CARGO_FEATURE_CLIENT").is_some())
.build_server(env::var_os("CARGO_FEATURE_SERVER").is_some())
.build_transport(false)
.boxed(".heddle.api.v1alpha1.PushClientFrame.frame.request")
.file_descriptor_set_path(descriptor)
.compile_protos(&protos, &[proto_root])?;
Ok(())
}