1use clap::{Parser, Subcommand, ValueEnum};
2use std::path::PathBuf;
3
4#[derive(Parser)]
5#[command(name = "pcap-processor")]
6#[command(about = "Extract and summarize information from pcap files")]
7#[command(version)]
8pub struct Cli {
9 #[command(subcommand)]
10 pub command: Commands,
11
12 #[arg(long, global = true, env = "PCAP_PROCESSOR_TSHARK")]
14 pub tshark: Option<PathBuf>,
15}
16
17#[derive(Subcommand)]
18pub enum Commands {
19 Unique(UniqueArgs),
21
22 Extract(ExtractArgs),
24}
25
26#[derive(Parser)]
27pub struct UniqueArgs {
28 pub field: String,
30
31 #[arg(required = true)]
33 pub files: Vec<String>,
34
35 #[arg(short, long)]
37 pub filter: Option<String>,
38
39 #[arg(short = 'F', long, value_enum, default_value = "plain")]
41 pub format: OutputFormat,
42
43 #[arg(short, long)]
45 pub count: bool,
46
47 #[arg(short, long, value_enum, default_value = "value")]
49 pub sort: SortOrder,
50
51 #[arg(short, long)]
53 pub no_resolve: bool,
54}
55
56#[derive(Parser)]
57pub struct ExtractArgs {
58 #[arg(short, long)]
60 pub filter: String,
61
62 #[arg(required = true)]
64 pub files: Vec<String>,
65
66 #[arg(short, long)]
68 pub output: PathBuf,
69}
70
71#[derive(ValueEnum, Clone, Copy, Default)]
72pub enum OutputFormat {
73 #[default]
74 Plain,
75 Json,
76 Csv,
77}
78
79#[derive(ValueEnum, Clone, Copy, Default)]
80pub enum SortOrder {
81 #[default]
82 Value,
83 Count,
84}