1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use std::ffi::{OsStr, OsString}; use std::rc::Rc; 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 } }