#![forbid(unsafe_code)]
use std::process::ExitCode;
use clap::Parser;
use evorule_cli::cli::{Cli, Command};
use evorule_cli::commands;
fn main() -> ExitCode {
init_tracing();
let cli = Cli::parse();
let result = match cli.command {
Command::Run {
rules_dir,
payload,
payload_file,
output,
max_steps,
} => commands::run::run(
&rules_dir,
payload.as_deref(),
payload_file.as_deref(),
output.as_deref(),
max_steps,
),
Command::Replay { fact_log } => commands::replay::run(&fact_log),
Command::Diff { a, b } => commands::diff::run(&a, &b),
Command::Validate { rules_dir } => commands::validate::run(&rules_dir),
Command::VerifyChain { fact_log } => commands::verify_chain::run(&fact_log),
Command::AnchorKeygen { output } => commands::anchor_keygen::run(output.as_deref()),
Command::VerifyAnchors { audit, pubkey } => {
commands::verify_anchors::run(&audit, pubkey.as_deref())
}
};
match result {
Ok(()) => ExitCode::SUCCESS,
Err(e) => {
eprintln!("Error: {}", e);
ExitCode::from(e.exit_code() as u8)
}
}
}
fn init_tracing() {
use tracing_subscriber::{fmt, EnvFilter};
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("warn"));
let _ = fmt().with_env_filter(filter).try_init();
}