oxyromon 0.16.0

Rusty ROM OrgaNizer
use super::config::*;
use super::progress::*;
use super::SimpleResult;
use async_std::path::{Path, PathBuf};
use indicatif::ProgressBar;
use std::process::Command;
use std::time::Duration;

pub fn create_nsz<P: AsRef<Path>, Q: AsRef<Path>>(
    progress_bar: &ProgressBar,
    nsp_path: &P,
    directory: &Q,
) -> SimpleResult<PathBuf> {
    progress_bar.set_message("Creating NSZ");
    progress_bar.set_style(get_none_progress_style());
    progress_bar.enable_steady_tick(Duration::from_millis(100));

    let mut nsz_path = directory
        .as_ref()
        .join(nsp_path.as_ref().file_name().unwrap());
    nsz_path.set_extension(NSZ_EXTENSION);

    progress_bar.println(format!("Creating {:?}", nsz_path.file_name().unwrap()));

    let output = Command::new("nsz")
        .arg("-C")
        .arg("-L")
        .arg("-K")
        .arg("-o")
        .arg(directory.as_ref())
        .arg(nsp_path.as_ref())
        .output()
        .expect("Failed to create NSZ");

    if !output.status.success() {
        bail!(String::from_utf8(output.stderr).unwrap().as_str())
    }

    progress_bar.set_message("");
    progress_bar.disable_steady_tick();

    Ok(nsz_path)
}

pub fn extract_nsz<P: AsRef<Path>, Q: AsRef<Path>>(
    progress_bar: &ProgressBar,
    nsz_path: &P,
    directory: &Q,
) -> SimpleResult<PathBuf> {
    progress_bar.set_message("Extracting NSZ");
    progress_bar.set_style(get_none_progress_style());
    progress_bar.enable_steady_tick(Duration::from_millis(100));

    progress_bar.println(format!(
        "Extracting {:?}",
        nsz_path.as_ref().file_name().unwrap()
    ));

    let mut nsp_path = directory
        .as_ref()
        .join(nsz_path.as_ref().file_name().unwrap());
    nsp_path.set_extension(NSP_EXTENSION);

    let output = Command::new("nsz")
        .arg("-D")
        .arg("-R")
        .arg("-o")
        .arg(directory.as_ref())
        .arg(nsz_path.as_ref())
        .output()
        .expect("Failed to extract NSZ");

    if !output.status.success() {
        bail!(String::from_utf8(output.stderr).unwrap().as_str())
    }

    progress_bar.set_message("");
    progress_bar.disable_steady_tick();

    Ok(nsp_path)
}