1use clap::Parser;
2use crate::constants::*;
3
4#[derive(Parser, Debug)]
5#[command(
6 name = "fping",
7 version = VERSION,
8 about = "Fast ping to multiple hosts")]
9
10pub struct Args {
11 pub targets: Vec<String>,
13
14 #[arg(short = 'c', long, value_name = "N")]
16 pub count: Option<u32>,
17
18 #[arg(short = 'C', long = "vcount", value_name = "N")]
20 pub vcount: Option<u32>,
21
22 #[arg(short = 'l', long)]
24 pub r#loop: bool,
25
26 #[arg(short = 'i', long, value_name = "MSEC", default_value = "10")]
28 pub interval: u64,
29
30 #[arg(short = 'p', long, value_name = "MSEC", default_value = "1000")]
32 pub period: u64,
33
34 #[arg(short = 't', long, value_name = "MSEC", default_value = "500")]
36 pub timeout: u64,
37
38 #[arg(short = 'r', long, default_value = "3")]
40 pub retry: u32,
41
42 #[arg(short = 'B', long, default_value = "1.5")]
44 pub backoff: f64,
45
46 #[arg(short = 'b', long = "size", value_name = "BYTES", default_value = "56")]
48 pub size: usize,
49
50 #[arg(short = 'f', long, value_name = "FILE")]
52 pub file: Option<String>,
53
54 #[arg(short = 'a', long)]
56 pub alive: bool,
57
58 #[arg(short = 'u', long)]
60 pub unreach: bool,
61
62 #[arg(short = 'q', long)]
64 pub quiet: bool,
65
66 #[arg(short = 's', long)]
68 pub stats: bool,
69
70 #[arg(short = 'e', long)]
72 pub elapsed: bool,
73
74 #[arg(short = 'A', long)]
76 pub addr: bool,
77
78 #[arg(short = 'D', long)]
80 pub timestamp: bool,
81
82 #[arg(short = 'J', long)]
84 pub json: bool,
85
86 #[arg(short = '4', long)]
88 pub ipv4: bool,
89
90 #[arg(short = '6', long)]
92 pub ipv6: bool,
93
94 #[arg(long = "report-all-rtts")]
96 pub report_all_rtts: bool,
97
98 #[arg(short = 'x', long = "reachable", value_name = "N")]
100 pub reachable: Option<u32>,
101}
102
103impl Args {
104 pub fn effective_count(&self) -> Option<u32> {
105 self.vcount.or(self.count)
106 }
107
108 pub fn is_verbose_count(&self) -> bool {
110 self.vcount.is_some()
111 }
112}