cargo-nw 0.1.1

Cargo subcommand for building NW application deployment packages (redistributables) for Windows, MacOS and Linux.
use console::style;
use std::fmt;

pub static mut VERBOSE: bool = false;

pub fn enable_verbose() {
    unsafe {
        VERBOSE = true;
    }
}

pub mod impls {
    use super::*;

    pub fn log_state_impl(source: &str, args: &fmt::Arguments<'_>) {
        print!("\r\x1b[2K{:>12} {}\r", style(source).green().bold(), args);
    }

    pub fn log_trace_impl(source: &str, args: &fmt::Arguments<'_>) {
        unsafe {
            if VERBOSE {
                println!("{:>12} {}", style(source).blue().bold(), args);
            }
        }
    }

    pub fn log_info_impl(source: &str, args: &fmt::Arguments<'_>) {
        println!("{:>12} {}", style(source).green().bold(), args);
    }

    pub fn log_warn_impl(source: &str, args: &fmt::Arguments<'_>) {
        println!("{:>12} {}", style(source).yellow().bold(), args);
    }

    pub fn stage_impl(args: &fmt::Arguments<'_>) {
        println!("{:>12} {}", style("Stage").cyan().bold(), args);
    }
}

#[macro_export]
macro_rules! log_trace {
    ($target:expr, $($t:tt)*) => (
        $crate::impls::log_trace_impl($target, &format_args!($($t)*))
    )
}

#[macro_export]
macro_rules! log_info {
    ($target:expr, $($t:tt)*) => (
        $crate::impls::log_info_impl($target, &format_args!($($t)*))
    )
}

#[macro_export]
macro_rules! log_warn {
    ($target:expr, $($t:tt)*) => (
        $crate::impls::log_warn_impl($target, &format_args!($($t)*))
    )
}

#[macro_export]
macro_rules! log_state {
    ($target:expr, $($t:tt)*) => (
        $crate::impls::log_state_impl($target, &format_args!($($t)*))
    )
}

pub use log_info;
pub use log_state;
pub use log_trace;
pub use log_warn;

pub fn log_state_clear() {
    print!("\r\x1b[2K");
}

#[macro_export]
macro_rules! stage {
    ($($t:tt)*) => (
        workflow_log::impls::log_impl($target, &format_args!($($t)*))
    )
}

pub use stage;