mod tracer; use std::path::PathBuf; use clap::{Parser, Subcommand}; #[derive(Parser, Debug)] struct Cli { #[command(subcommand)] cmd: Subcommands, } #[derive(Subcommand, Debug, Clone)] enum Subcommands { Run { #[arg(short, long)] output: Option, cmd: Vec, } } fn main() { env_logger::init(); let cli = Cli::parse(); match cli.cmd { Subcommands::Run { output, cmd } => { let fp: Box = if let Some(output) = &output { Box::new(std::fs::File::options().write(true).create(true).open(output).unwrap()) } else { Box::new(std::io::stdout()) }; let mut t = tracer::Tracer::new().unwrap(); t.start_root_process(cmd).unwrap(); if output.is_none() { serde_json::to_writer_pretty(fp, &t.log).unwrap(); } else { serde_json::to_writer(fp, &t.log).unwrap(); } } } }