comet-web 0.1.3

Reactive Isomorphic Web Framework
Documentation
use colored::*;

use std::{io::Write, process::Command};

fn print(msg: &str) {
    let mut stdout = std::io::stdout();

    print!("{}", msg);

    stdout.flush().unwrap();
}

fn print_ok(log: &str) {
    println!(
        "\r{}{}{} {}   ",
        "[".purple(),
        "".green(),
        "]".purple(),
        log.green()
    );
}

fn print_err(log: &str) {
    println!(
        "\r{}{}{} {}   ",
        "[".purple(),
        "".red(),
        "]".purple(),
        log.red()
    );
}

fn print_warn(log: &str) {
    println!(
        "\r{}{}{} {}   ",
        "[".purple(),
        "!".yellow(),
        "]".purple(),
        log.yellow()
    );
}

pub fn log_execute_async(log: &str, name: &str, args: &[&str]) {
    print(format!("{} {} {}...", "[".purple(), "]".purple(), log).as_str());

    let handle = Command::new(name)
        .env("TERM", "xterm-256color")
        .args(args)
        .spawn()
        .expect(&format!("Failed to execute {}", name));

    print_ok(log);

    let status = handle.wait_with_output().unwrap();

    if !status.status.success() {
        std::process::exit(1);
    }
}

pub fn log_execute(log: &str, name: &str, args: &[&str]) {
    print(format!("{} {} {}...", "[".purple(), "]".purple(), log).as_str());

    let status = Command::new(name)
        .env("TERM", "xterm-256color")
        .args(args)
        .output()
        .expect(&format!("Failed to execute {}", name));

    let out = String::from_utf8_lossy(&status.stderr);

    if out.trim_end().is_empty() {
        print_ok(log);
    } else {
        if status.status.success() {
            print_warn(log);
        } else {
            print_err(log);
        }

        println!("{}", out);
    }

    if !status.status.success() {
        std::process::exit(1);
    }
}