nettop 0.1.1

CLI network usage monitor by application — like NetLimiter for the terminal
use clap::{Parser, ValueEnum};

/// nettop — Network usage monitor by application
/// Like NetLimiter, but for your terminal.
///
/// Author:   Hadi Cahyadi <cumulus13@gmail.com>
/// Homepage: https://github.com/cumulus13/nettop
#[derive(Parser, Debug, Clone)]
#[command(
    name = "nettop",
    version,
    about = "CLI network usage monitor by application — like NetLimiter for the terminal",
    long_about = None,
    after_help = "KEYS (interactive mode):\n  q / Ctrl+C  Quit\n  r           Reset cumulative counters\n  s           Cycle sort column\n  p           Pause / resume\n  f           Toggle filter input\n  j/k or ↑/↓  Scroll\n  Tab         Toggle rate / cumulative view\n"
)]
pub struct Args {
    /// Refresh interval in milliseconds
    #[arg(short, long, default_value_t = 1000, value_name = "MS")]
    pub interval: u64,

    /// Show only top N processes (0 = all)
    #[arg(short = 'n', long, default_value_t = 0, value_name = "N")]
    pub top: usize,

    /// Sort column
    #[arg(short, long, default_value = "total-rate", value_name = "COLUMN")]
    pub sort: SortBy,

    /// Filter by process name (case-insensitive substring)
    #[arg(short, long, value_name = "NAME")]
    pub filter: Option<String>,

    /// Output as JSON (non-interactive, prints one snapshot and exits)
    #[arg(long)]
    pub json: bool,

    /// Disable colors (plain text mode)
    #[arg(long)]
    pub no_color: bool,

    /// Show cumulative totals instead of per-second rates
    #[arg(long)]
    pub cumulative: bool,

    /// Number of snapshots before exiting (0 = run forever)
    #[arg(long, default_value_t = 0, value_name = "COUNT")]
    pub count: usize,
}

#[derive(ValueEnum, Debug, Clone, PartialEq)]
pub enum SortBy {
    Pid,
    Name,
    Sent,
    Recv,
    TotalRate,
    SentTotal,
    RecvTotal,
}