heddle-api 0.1.2

Generated Rust types and gRPC bindings for the Heddle public API
Documentation
// SPDX-License-Identifier: Apache-2.0
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())
        // AgentGatewayService.Connect would otherwise collide with tonic's
        // transport convenience constructor. Consumers construct Channels
        // explicitly, which also keeps endpoint policy outside this crate.
        .build_transport(false)
        .boxed(".heddle.api.v1alpha1.PushClientFrame.frame.request")
        .file_descriptor_set_path(descriptor)
        .compile_protos(&protos, &[proto_root])?;
    Ok(())
}