o- 0.7.1

Multi-Engine JavaScript Runtime
Documentation
use clap::Parser;
use o_::{AppError, args::Args, conf, report};
use std::{fs, process};

fn main() {
    if let Err(error) = _main() {
        report::print_error(&error.report());
        process::exit(1);
    }
}

fn _main() -> Result<(), AppError> {
    let args = Args::parse();
    let toolchain = match &args.command {
        o_::args::Commands::Run { .. } => {
            let home = home::home_dir().ok_or(AppError::HomeDirUnavailable)?;
            let mut config = home;
            config.push(".config");
            config.push("o-");
            config.push("config.toml");
            let config_file =
                fs::read_to_string(&config).map_err(|source| AppError::ReadConfig {
                    path: config.clone(),
                    source,
                })?;
            Some(conf::parse_config(&config_file)?)
        }
        _ => None,
    };
    o_::process(args.command, toolchain.as_deref())
}