]> git.proxmox.com Git - rustc.git/blob - src/vendor/clap/src/args/arg_builder/valued.rs
New upstream version 1.20.0+dfsg1
[rustc.git] / src / vendor / clap / src / args / arg_builder / valued.rs
1 use std::rc::Rc;
2 use std::ffi::{OsStr, OsString};
3
4 use vec_map::VecMap;
5
6 use Arg;
7
8 #[allow(missing_debug_implementations)]
9 #[derive(Clone)]
10 pub struct Valued<'a, 'b>
11 where 'a: 'b
12 {
13 pub possible_vals: Option<Vec<&'b str>>,
14 pub val_names: Option<VecMap<&'b str>>,
15 pub num_vals: Option<u64>,
16 pub max_vals: Option<u64>,
17 pub min_vals: Option<u64>,
18 pub validator: Option<Rc<Fn(String) -> Result<(), String>>>,
19 pub validator_os: Option<Rc<Fn(&OsStr) -> Result<(), OsString>>>,
20 pub val_delim: Option<char>,
21 pub default_val: Option<&'b OsStr>,
22 pub default_vals_ifs: Option<VecMap<(&'a str, Option<&'b OsStr>, &'b OsStr)>>,
23 pub terminator: Option<&'b str>,
24 }
25
26 impl<'n, 'e> Default for Valued<'n, 'e> {
27 fn default() -> Self {
28 Valued {
29 possible_vals: None,
30 num_vals: None,
31 min_vals: None,
32 max_vals: None,
33 val_names: None,
34 validator: None,
35 validator_os: None,
36 val_delim: None,
37 default_val: None,
38 default_vals_ifs: None,
39 terminator: None,
40 }
41 }
42 }
43
44 impl<'n, 'e> Valued<'n, 'e> {
45 pub fn fill_in(&mut self) {
46 if let Some(ref vec) = self.val_names {
47 if vec.len() > 1 {
48 self.num_vals = Some(vec.len() as u64);
49 }
50 }
51 }
52 }
53
54 impl<'n, 'e, 'z> From<&'z Arg<'n, 'e>> for Valued<'n, 'e> {
55 fn from(a: &'z Arg<'n, 'e>) -> Self {
56 let mut v = a.v.clone();
57 if let Some(ref vec) = a.v.val_names {
58 if vec.len() > 1 {
59 v.num_vals = Some(vec.len() as u64);
60 }
61 }
62 v
63 }
64 }