dist_tx 0.5.1

Rust language bindings for XA Distributed Transactions
Documentation
#!/usr/bin/env rust-script
//! ```cargo
//! [dependencies]
//! yansi = "0.5"
//! ```
extern crate yansi;
use std::process::Command;

macro_rules! run_command {
    ($cmd:expr) => {
        let mut command = command!($cmd);
        let mut child = command.spawn().unwrap();
        let status = child.wait().unwrap();
        if !status.success() {
            println!(
                "{} in {}",
                yansi::Paint::red("qualify terminates due to error"),
                yansi::Paint::yellow($cmd)
            );
            std::process::exit(-1);
        }
    };
}

macro_rules! command {
    ($cmd:expr) => {{
        print!("\n> {}\n", yansi::Paint::yellow($cmd));
        let mut chips = $cmd.split(' ');
        let mut command = Command::new(chips.next().unwrap());
        for chip in chips {
            command.arg(chip);
        }
        command
    }};
}

// fn run_script(s: &str) {
//     let mut path = std::path::PathBuf::from("./scripts");
//     path.push(s);
//     let command = format!(
//         "cargo script {}",
//         path.to_string_lossy().to_owned().to_string()
//     );
//     run_command!(&command);
// }

fn main() {
    // format
    run_command!("cargo fmt");

    // Build in important variants
    run_command!("cargo build");
    run_command!("cargo build --release");

    // Clippy in important variants
    run_command!("cargo clippy -- -D warnings");

    // Run tests in important variants
    run_command!("cargo test --release");
    run_command!("cargo test");

    // doc
    run_command!("cargo doc --all-features --no-deps --open");

    // check git status
    let mut cmd = command!("git status -s");
    let child = cmd.stdout(std::process::Stdio::piped()).spawn().unwrap();
    let output = child.wait_with_output().unwrap();
    if output.stdout.len() > 0 {
        print!("> {}", yansi::Paint::red("there are unsubmitted files"));
        std::process::exit(-1);
    }

    // say goodbye
    println!("\n> all done :-)  Looks like you're ready to \"cargo publish\"?");
}