]> git.proxmox.com Git - cargo.git/blame - vendor/clap/examples/tutorial_derive/04_02_validate.rs
Merge branch 'debian/sid' into proxmox/bullseye
[cargo.git] / vendor / clap / examples / tutorial_derive / 04_02_validate.rs
CommitLineData
62c5094d
FG
1use std::ops::RangeInclusive;
2
3use clap::Parser;
4
5#[derive(Parser)]
6#[clap(author, version, about, long_about = None)]
7struct Cli {
8 /// Network port to use
9 #[clap(value_parser = port_in_range)]
10 port: u16,
11}
12
13fn main() {
14 let cli = Cli::parse();
15
16 println!("PORT = {}", cli.port);
17}
18
19const PORT_RANGE: RangeInclusive<usize> = 1..=65535;
20
21fn 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}