diff options
Diffstat (limited to 'clap/src/args/arg_builder/valued.rs')
-rw-r--r-- | clap/src/args/arg_builder/valued.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/clap/src/args/arg_builder/valued.rs b/clap/src/args/arg_builder/valued.rs new file mode 100644 index 0000000..d70854d --- /dev/null +++ b/clap/src/args/arg_builder/valued.rs @@ -0,0 +1,67 @@ +use std::rc::Rc; +use std::ffi::{OsStr, OsString}; + +use map::VecMap; + +use Arg; + +#[allow(missing_debug_implementations)] +#[derive(Clone)] +pub struct Valued<'a, 'b> +where + 'a: 'b, +{ + pub possible_vals: Option<Vec<&'b str>>, + pub val_names: Option<VecMap<&'b str>>, + pub num_vals: Option<u64>, + pub max_vals: Option<u64>, + pub min_vals: Option<u64>, + pub validator: Option<Rc<Fn(String) -> Result<(), String>>>, + pub validator_os: Option<Rc<Fn(&OsStr) -> Result<(), OsString>>>, + pub val_delim: Option<char>, + pub default_val: Option<&'b OsStr>, + pub default_vals_ifs: Option<VecMap<(&'a str, Option<&'b OsStr>, &'b OsStr)>>, + pub env: Option<(&'a OsStr, Option<OsString>)>, + pub terminator: Option<&'b str>, +} + +impl<'n, 'e> Default for Valued<'n, 'e> { + fn default() -> Self { + Valued { + possible_vals: None, + num_vals: None, + min_vals: None, + max_vals: None, + val_names: None, + validator: None, + validator_os: None, + val_delim: None, + default_val: None, + default_vals_ifs: None, + env: None, + terminator: None, + } + } +} + +impl<'n, 'e> Valued<'n, 'e> { + pub fn fill_in(&mut self) { + if let Some(ref vec) = self.val_names { + if vec.len() > 1 { + self.num_vals = Some(vec.len() as u64); + } + } + } +} + +impl<'n, 'e, 'z> From<&'z Arg<'n, 'e>> for Valued<'n, 'e> { + fn from(a: &'z Arg<'n, 'e>) -> Self { + let mut v = a.v.clone(); + if let Some(ref vec) = a.v.val_names { + if vec.len() > 1 { + v.num_vals = Some(vec.len() as u64); + } + } + v + } +} |