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