use clap::Parser;
use miette::Result;
use std::process::ExitCode;
use tracing_subscriber::{EnvFilter, fmt};
use crate::commands::Command;
use crate::common::diagnostics::install_miette_handler;
#[derive(Debug, Parser)]
#[command(
name = "atproto-devtool",
version,
about = "Diagnostics and conformance tooling for atproto services.",
long_about = None,
)]
pub struct Cli {
#[arg(long, global = true)]
verbose: bool,
#[arg(long, global = true)]
no_color: bool,
#[command(subcommand)]
command: Command,
}
pub async fn run() -> Result<ExitCode> {
let cli = Cli::parse();
install_miette_handler(cli.no_color)?;
install_tracing(cli.verbose);
cli.command.run(cli.no_color).await
}
fn install_tracing(verbose: bool) {
let default_filter = if verbose { "debug" } else { "warn" };
let filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(default_filter));
let _ = fmt()
.with_env_filter(filter)
.with_writer(std::io::stderr)
.try_init();
}