moros 0.12.0

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

use alloc::format;
use miniz_oxide::inflate::decompress_to_vec_zlib as inflate;

pub fn main(args: &[&str]) -> Result<(), ExitCode> {
    if args.len() != 2 {
        help();
        return Err(ExitCode::UsageError);
    }
    if args[1] == "-h" || args[1] == "--help" {
        help();
        return Ok(());
    }

    let path = args[1];
    if fs::is_file(path) {
        if let Ok(bytes) = fs::read_to_bytes(path) {
            if let Ok(buf) = inflate(&bytes) {
                if path.ends_with(".z") {
                    let dest = path.trim_end_matches(".z");
                    if fs::write(dest, &buf).is_ok() {
                        if fs::delete(path).is_ok() {
                            Ok(())
                        } else {
                            error!("Could not drop '{}'", path);
                            Err(ExitCode::Failure)
                        }
                    } else {
                        error!("Could not inflate to '{}'", dest);
                        Err(ExitCode::Failure)
                    }
                } else {
                    error!("Could not drop '.z' suffix from '{}'", path);
                    Err(ExitCode::Failure)
                }
            } else {
                error!("Could not inflate '{}'", path);
                Err(ExitCode::Failure)
            }
        } else {
            error!("Could not read '{}'", path);
            Err(ExitCode::Failure)
        }
    } else {
        error!("Could not open '{}'", path);
        Err(ExitCode::Failure)
    }
}

fn help() {
    let csi_option = Style::color("aqua");
    let csi_title = Style::color("yellow");
    let csi_reset = Style::reset();
    println!(
        "{}Usage:{} inflate {}<file>{}",
        csi_title, csi_reset, csi_option, csi_reset
    );
}