moros 0.12.0

MOROS: Obscure Rust Operating System
Documentation
use crate::api::console::Style;
use crate::api::process::ExitCode;
use crate::sys;

pub fn main(args: &[&str]) -> Result<(), ExitCode> {
    let n = args.len();
    for i in 1..n {
        match args[i] {
            "-h" | "--help" => {
                help();
                return Ok(());
            }
            _ => continue,
        }
    }
    match n {
        1 => {
            let width = sys::process::envs().keys().map(|k|
                k.len()
            ).max().unwrap_or(0);
            for (key, val) in sys::process::envs() {
                println!("{:width$} \"{}\"", key, val, width = width);
            }
            Ok(())
        }
        2 => {
            let key = args[1];
            if let Some(val) = sys::process::env(key) {
                println!("{}", val);
                Ok(())
            } else {
                error!("Could not get '{}'", key);
                Err(ExitCode::Failure)
            }
        }
        3 => {
            sys::process::set_env(args[1], args[2]);
            Ok(())
        }
        _ => {
            help();
            Err(ExitCode::UsageError)
        }
    }
}

fn help() {
    let csi_option = Style::color("aqua");
    let csi_title = Style::color("yellow");
    let csi_reset = Style::reset();
    println!(
        "{}Usage:{} env {}[<key> [<value>]]{}",
        csi_title, csi_reset, csi_option, csi_reset
    );
}