]> git.proxmox.com Git - rustc.git/blame - vendor/structopt/examples/true_or_false.rs
Update upstream source from tag 'upstream/1.52.1+dfsg1'
[rustc.git] / vendor / structopt / examples / true_or_false.rs
CommitLineData
f20569fa
XL
1//! How to parse `--foo=true --bar=false` and turn them into bool.
2
3use structopt::StructOpt;
4
5fn true_or_false(s: &str) -> Result<bool, &'static str> {
6 match s {
7 "true" => Ok(true),
8 "false" => Ok(false),
9 _ => Err("expected `true` or `false`"),
10 }
11}
12
13#[derive(StructOpt, Debug, PartialEq)]
14struct Opt {
15 // Default parser for `try_from_str` is FromStr::from_str.
16 // `impl FromStr for bool` parses `true` or `false` so this
17 // works as expected.
18 #[structopt(long, parse(try_from_str))]
19 foo: bool,
20
21 // Of course, this could be done with an explicit parser function.
22 #[structopt(long, parse(try_from_str = true_or_false))]
23 bar: bool,
24
25 // `bool` can be positional only with explicit `parse(...)` annotation
26 #[structopt(long, parse(try_from_str))]
27 boom: bool,
28}
29
30fn main() {
31 assert_eq!(
32 Opt::from_iter(&["test", "--foo=true", "--bar=false", "true"]),
33 Opt {
34 foo: true,
35 bar: false,
36 boom: true
37 }
38 );
39 // no beauty, only truth and falseness
40 assert!(Opt::from_iter_safe(&["test", "--foo=beauty"]).is_err());
41}