speedtest-tui 0.1.1

A terminal-based network speed test tool with real-time gauges and graphs
mod app;
mod cli;
mod config;
mod network;
mod storage;
mod ui;
mod utils;

use anyhow::Result;
use clap::Parser;
use cli::{Cli, Commands};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

#[tokio::main]
async fn main() -> Result<()> {
    // Initialize tracing
    tracing_subscriber::registry()
        .with(
            tracing_subscriber::EnvFilter::try_from_default_env()
                .unwrap_or_else(|_| "speedtest_tui=info".into()),
        )
        .with(tracing_subscriber::fmt::layer().with_target(false))
        .init();

    let cli = Cli::parse();

    match cli.command {
        Some(Commands::Diagnose) => {
            cli::run_diagnose().await?;
        }
        Some(Commands::Ping { host }) => {
            cli::run_ping(&host).await?;
        }
        Some(Commands::Traceroute { host }) => {
            cli::run_traceroute(&host).await?;
        }
        Some(Commands::Dns { domain }) => {
            cli::run_dns(&domain).await?;
        }
        Some(Commands::Interfaces) => {
            cli::run_interfaces()?;
        }
        Some(Commands::History { export, clear }) => {
            cli::run_history(export, clear).await?;
        }
        None => {
            if cli.simple {
                cli::run_simple_test(&cli).await?;
            } else if cli.json {
                cli::run_json_test(&cli).await?;
            } else if cli.csv {
                cli::run_csv_test(&cli).await?;
            } else {
                // Run TUI
                app::run_tui().await?;
            }
        }
    }

    Ok(())
}