• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::ops::RangeInclusive;
2 
3 use clap::Parser;
4 
5 #[derive(Parser)]
6 #[command(author, version, about, long_about = None)]
7 struct Cli {
8     /// Network port to use
9     #[arg(value_parser = port_in_range)]
10     port: u16,
11 }
12 
main()13 fn main() {
14     let cli = Cli::parse();
15 
16     println!("PORT = {}", cli.port);
17 }
18 
19 const PORT_RANGE: RangeInclusive<usize> = 1..=65535;
20 
port_in_range(s: &str) -> Result<u16, String>21 fn port_in_range(s: &str) -> Result<u16, String> {
22     let port: usize = s
23         .parse()
24         .map_err(|_| format!("`{}` isn't a port number", s))?;
25     if PORT_RANGE.contains(&port) {
26         Ok(port as u16)
27     } else {
28         Err(format!(
29             "port not in range {}-{}",
30             PORT_RANGE.start(),
31             PORT_RANGE.end()
32         ))
33     }
34 }
35