rusht 1.1.0

Shell commands written in Rust
Documentation
use crate::common::{LineWriter, StdWriter};
use crate::ExitStatus;

use super::cached;
use super::CacheStatus;
use super::CachedArgs;

pub async fn handle_cached(args: CachedArgs) -> ExitStatus {
    let verbose = args.verbose;
    let show_cached_output = !args.no_cached_output;
    let mut writer = StdWriter::stdout();
    match cached(args, &mut writer).await {
        Ok(status) => match status {
            CacheStatus::RanSuccessfully => {
                if verbose {
                    eprintln!("successfully ran")
                    //TODO @mverleg: better msg?
                }
                ExitStatus::ok()
            }
            CacheStatus::FromCache(out) => {
                if show_cached_output && !out.is_empty() {
                    writer.write_line(out).await;
                }
                if verbose {
                    eprintln!("loaded from cache")
                    //TODO @mverleg: better msg?
                }
                ExitStatus::ok()
            }
            CacheStatus::Failed(exit_code) => {
                eprintln!(
                    "the command ran, but it failed and was not cached (code: {})",
                    exit_code
                );
                exit_code
            }
        },
        Err(err) => {
            eprintln!("failed: {}", err);
            ExitStatus::err()
        }
    }
}