spiffe 0.7.0

Rust client library implementation for SPIFFE
Documentation
use std::path::Path;
use std::{env, fs};

use anyhow::{Context as _, ensure};

fn main() -> anyhow::Result<()> {
    println!("cargo:rerun-if-changed=src/proto");

    let out_dir = env::var_os("OUT_DIR").context("failed to lookup `OUT_DIR`")?;
    let out_dir = Path::new(&out_dir);

    let mut proto_config = prost_build::Config::new();
    proto_config.bytes(["."]);

    let file_descriptors = protox::compile(["src/proto/workload.proto"], ["src/proto"])
        .context("failed to compile protocol buffer file set")?;

    tonic_prost_build::configure()
        .build_client(true)
        .out_dir(out_dir)
        .compile_fds_with_config(file_descriptors, proto_config)
        .context("failed to compile protocol buffers")?;

    let workload = out_dir.join("_.rs");
    ensure!(
        workload.exists(),
        "expected generated file `_.rs` not found in `{}`",
        out_dir.display()
    );
    fs::rename(&workload, out_dir.join("workload.rs"))
        .with_context(|| format!("failed to rename `{}` to `workload.rs`", workload.display()))?;

    Ok(())
}