whoseportisitanyway 1.1.2

Cross-platform TUI for discovering which ports are in use, who owns them, and what they're for
Documentation
use anyhow::Result;

use crate::config::Config;

use super::scan_and_classify;

pub fn run(config: &Config, json: bool) -> Result<()> {
    let entries = scan_and_classify(config)?;

    if json {
        let output = serde_json::to_string_pretty(&entries)?;
        println!("{output}");
    } else {
        println!(
            "{:<7} {:<5} {:<20} {:<12} {:<20} {:<8} {:<12}",
            "PORT", "PROTO", "PROCESS", "TYPE", "PROJECT", "PID", "STATE"
        );
        for e in &entries {
            println!(
                "{:<7} {:<5} {:<20} {:<12} {:<20} {:<8} {}",
                e.port,
                e.protocol,
                e.process_name,
                e.classification,
                e.project.as_ref().map(|p| p.name.as_str()).unwrap_or(""),
                e.pid,
                e.state,
            );
        }
    }

    Ok(())
}