rsonpath 0.10.0

Blazing fast JSONPath CLI tool powered by SIMD
use std::error::Error;
use vergen::{CargoBuilder, Emitter, RustcBuilder};
use vergen_git2::Git2Builder;

const CODEGEN_ENV_KEY: &str = "RSONPATH_CODEGEN_FLAGS";

fn main() -> Result<(), Box<dyn Error>> {
    let cargo = CargoBuilder::default()
        .features(true)
        .opt_level(true)
        .target_triple(true)
        .build()?;
    let git = Git2Builder::default().sha(false).build()?;
    let rustc = RustcBuilder::all_rustc()?;

    Emitter::new()
        .idempotent()
        .add_instructions(&cargo)?
        .add_instructions(&git)?
        .add_instructions(&rustc)?
        .emit()?;

    let codegen_flags = concat_codegen_flags();

    println!("cargo:rustc-env={CODEGEN_ENV_KEY}={codegen_flags}");

    Ok(())
}

fn concat_codegen_flags() -> String {
    rustflags::from_env()
        .filter_map(|x| match x {
            rustflags::Flag::Codegen { opt, value } => {
                Some(opt + &value.map_or(String::default(), |x| format!("={x}")))
            }
            _ => None,
        })
        .reduce(|s, x| format!("{s},{x}"))
        .unwrap_or_default()
}