nvme-cli-sys 0.1.2

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;
        }
    }
    match pkg_config::Config::new()
        .atleast_version("1.3")
        .probe("libnvme")
    {
        Ok(_) => {
            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
                }
            }
        }
        Err(e) => {
            eprintln!("Could not find libnvme library: {}", e);
            ExitCode::FAILURE
        }
    }
}