nvme-cli-sys 0.1.0

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

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

fn main() -> ExitCode {
    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
        }
    }
}