nvme-cli-sys 0.1.3

Rust FFI bindings to the nvme-cli C library.
Documentation
extern crate pkg_config;

use std::env;
use std::fs;
use std::path::PathBuf;
use std::process::ExitCode;

fn main() -> ExitCode {
    match env::var("OUT_DIR") {
        Ok(out) => {
            if env::var("DOCS_RS").is_ok() {
                println!("cargo:warning=building on docs.rs; skipping libnvme detection");
                let out_dir = PathBuf::from(out);
                if let Err(e) =
                    fs::write(out_dir.join("bindings.rs"), "// docs.rs dummy bindings\n")
                {
                    eprintln!("{}", e);
                    return ExitCode::FAILURE;
                }
                return ExitCode::SUCCESS;
            }
        }
        Err(e) => {
            eprintln!("{}", e);
            return ExitCode::FAILURE;
        }
    }
    let bindings = match bindgen::Builder::default()
        .header("wrapper.h")
        .default_enum_style(bindgen::EnumVariation::Rust {
            non_exhaustive: false,
        })
        .generate_comments(true)
        .derive_copy(true)
        .derive_hash(true)
        .derive_debug(true)
        .derive_default(true)
        .derive_partialeq(true)
        .generate()
    {
        Ok(bindings) => bindings,
        Err(e) => {
            eprintln!("Failed to generate bindings: {}", e);
            return ExitCode::FAILURE;
        }
    };

    let out = match env::var("OUT_DIR") {
        Ok(out) => PathBuf::from(out),
        Err(e) => {
            eprintln!("{}", e);
            return ExitCode::FAILURE;
        }
    };

    match bindings.write_to_file(out.join("bindings.rs")) {
        Ok(_) => ExitCode::SUCCESS,
        Err(e) => {
            eprintln!("Failed to write bindings.rs: {}", e);
            ExitCode::FAILURE
        }
    }
}