ice 0.3.0

A simple CTF tool store
Documentation
use atty::Stream;
use ice::app::cli::{parse_args, Command};
use pico_args::Arguments;
use std::{
    ffi::OsString,
    io::{self, Read},
};

fn print_usage() {
    println!("ICE - A simple CTF tool store.");
    println!("Usage: ice <SUBCOMMAND> [ARGUMENTS]");
    println!("Run 'ice help' for a list of available subcommands");
}

fn main() {
    let mut args: Vec<OsString> = std::env::args_os().skip(1).collect();

    if !atty::is(Stream::Stdin) {
        let mut input = String::new();
        io::stdin().read_to_string(&mut input).unwrap();
        let input = input.trim();
        if !input.is_empty() {
            args.push(OsString::from(input));
        }
    }

    let mut args = Arguments::from_vec(args);

    let command = match parse_args(&mut args) {
        Ok(cmd) => cmd,
        Err(e) => {
            eprintln!("Error: {}", e);
            print_usage();
            return;
        }
    };

    match command {
        Command::Help => print_usage(),
        Command::Version => println!("ice {}", env!("CARGO_PKG_VERSION")),
        Command::Unknown(cmd) => {
            eprintln!("Error: Unknown subcommand '{}'", cmd);
            print_usage();
        }
        _ => command.run(),
    }
}