extern crate anyhow;
extern crate clap;
use anyhow::{Result, bail};
use clap::Parser;
use rudof_cli::cli::parser::{Cli, Command};
use rudof_cli::commands::{CommandContext, CommandFactory};
use std::{env, io};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::{filter::EnvFilter, fmt};
fn main() -> Result<()> {
setup();
let args = clientele::args_os()?;
let cli = Cli::parse_from(args);
match &cli.command {
Some(cmd) => execute(cmd, cli.debug)?,
None => bail!("Command not specified. Use --help for available commands."),
}
Ok(())
}
fn setup() {
clientele::dotenv().ok();
unsafe {
env::set_var("RUSTEMO_NOTRACE", "1");
}
let env_filter = EnvFilter::try_from_default_env()
.or_else(|_| EnvFilter::try_new("info"))
.unwrap();
let fmt_layer = fmt::layer()
.with_file(true)
.with_target(false)
.with_line_number(true)
.with_writer(io::stderr)
.without_time();
tracing_subscriber::registry()
.with(env_filter.clone())
.with(fmt_layer)
.init();
tracing::trace!("rudof running with tracing filter {}", env_filter);
}
fn execute(cli_command: &Command, debug: u8) -> Result<()> {
let command = CommandFactory::create(cli_command.clone())?;
let mut ctx = CommandContext::from_cli(cli_command, debug)?;
command.execute(&mut ctx)?;
Ok(())
}