nettop 0.1.1

CLI network usage monitor by application — like NetLimiter for the terminal
use serde::Serialize;

/// Per-process network snapshot
#[derive(Debug, Clone, Serialize)]
pub struct ProcessNet {
    pub pid: u32,
    pub name: String,
    pub exe: String,

    /// Bytes/sec sent (current sample)
    pub sent_rate: u64,
    /// Bytes/sec received (current sample)
    pub recv_rate: u64,

    /// Cumulative bytes sent since nettop started
    pub sent_total: u64,
    /// Cumulative bytes received since nettop started
    pub recv_total: u64,

    /// Sparkline history: last N total_rate samples (newest last)
    #[serde(skip)]
    pub history: Vec<u64>,
}

impl ProcessNet {
    pub fn total_rate(&self) -> u64 {
        self.sent_rate.saturating_add(self.recv_rate)
    }
    pub fn total_cumulative(&self) -> u64 {
        self.sent_total.saturating_add(self.recv_total)
    }
}

/// App-level state passed between collector → UI
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct Snapshot {
    pub entries: Vec<ProcessNet>,
    pub elapsed_ms: u64,
    pub total_sent: u64,
    pub total_recv: u64,
    /// Timestamp of this snapshot (seconds since epoch)
    pub timestamp: u64,
}