ia-sandbox 0.4.0

A CLI to sandbox (jail) and collect usage of applications.
Documentation
#![deny(
    clippy::clone_on_ref_ptr,
    clippy::default_trait_access,
    clippy::doc_markdown,
    clippy::empty_enum,
    clippy::empty_line_after_outer_attr,
    clippy::enum_glob_use,
    clippy::expl_impl_clone_on_copy,
    clippy::fallible_impl_from,
    clippy::float_cmp_const,
    clippy::items_after_statements,
    clippy::match_same_arms,
    clippy::multiple_inherent_impl,
    clippy::mut_mut,
    clippy::needless_continue,
    clippy::range_plus_one,
    clippy::single_match_else,
    clippy::unimplemented,
    clippy::unnecessary_unwrap,
    clippy::use_self,
    clippy::used_underscore_binding,
    clippy::writeln_empty_string,
    clippy::wrong_self_convention,
    missing_copy_implementations,
    missing_debug_implementations,
    trivial_casts,
    trivial_numeric_casts,
    unreachable_pub,
    unused_extern_crates,
    unused_import_braces,
    unused_qualifications,
    unused_results,
    variant_size_differences,
    warnings
)]

use std::io;

use clap::Parser;

use ia_sandbox::utils::DurationExt;

mod app;
pub(crate) mod args;

use app::App;
use args::OutputType;

fn main() -> anyhow::Result<()> {
    let (config, output_type) = App::try_parse()?
        .load_config_file()?
        .into_config_and_output();
    let run_info = ia_sandbox::spawn_jail(&config)?.wait()?;

    match output_type {
        OutputType::Human => println!("{}", run_info),
        OutputType::Oneline => {
            if run_info.is_success() {
                print!("OK: ");
            } else {
                print!("FAIL: ");
            }
            println!(
                "time {}ms memory {}kb: {}",
                run_info.usage().user_time().as_milliseconds(),
                run_info.usage().memory().as_kilobytes(),
                run_info.result()
            );
        }
        OutputType::Json => {
            let stdout = io::stdout();
            serde_json::to_writer_pretty(stdout.lock(), &run_info)?;
        }
    }
    Ok(())
}