cmd_lib 1.0.6

Common rust commandline macros and utils, to write shell script like tasks easily
Documentation
use crate::{CmdEnv, CmdResult};
use log::*;
use std::io::{Read, Write};

#[doc(hidden)]
pub fn builtin_true(_env: &mut CmdEnv) -> CmdResult {
    Ok(())
}

#[doc(hidden)]
pub fn builtin_echo(env: &mut CmdEnv) -> CmdResult {
    let msg = env.args()[1..].join(" ");
    writeln!(env.stdout(), "{}", msg)
}

#[doc(hidden)]
pub fn builtin_die(env: &mut CmdEnv) -> CmdResult {
    error!("FATAL: {}", env.args()[1..].join(" "));
    std::process::exit(1);
}

#[doc(hidden)]
pub fn builtin_error(env: &mut CmdEnv) -> CmdResult {
    error!("{}", env.args()[1..].join(" "));
    Ok(())
}

#[doc(hidden)]
pub fn builtin_warn(env: &mut CmdEnv) -> CmdResult {
    warn!("{}", env.args()[1..].join(" "));
    Ok(())
}

#[doc(hidden)]
pub fn builtin_info(env: &mut CmdEnv) -> CmdResult {
    info!("{}", env.args()[1..].join(" "));
    Ok(())
}

#[doc(hidden)]
pub fn builtin_debug(env: &mut CmdEnv) -> CmdResult {
    debug!("{}", env.args()[1..].join(" "));
    Ok(())
}

#[doc(hidden)]
pub fn builtin_trace(env: &mut CmdEnv) -> CmdResult {
    trace!("{}", env.args()[1..].join(" "));
    Ok(())
}

#[doc(hidden)]
pub fn builtin_cat(env: &mut CmdEnv) -> CmdResult {
    if env.args().len() == 1 {
        let mut buf = vec![];
        env.stdin().read_to_end(&mut buf)?;
        env.stdout().write_all(&buf)?;
        return Ok(());
    }

    let mut file = env.args()[1].clone();
    if !file.starts_with('/') && !env.current_dir().is_empty() {
        file = format!("{}/{}", env.current_dir(), file);
    }
    env.stdout().write_all(&std::fs::read(file)?)?;
    Ok(())
}