From 94aca92e44a4a6974a087afdf3c3bfa19f631a05 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 24 Nov 2022 08:11:32 -0600 Subject: [PATCH] feat: Create ValueParser from Vec This dynamically generated list of possible values. Inspired by #4504 --- src/builder/value_parser.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/builder/value_parser.rs b/src/builder/value_parser.rs index 5fe6d2477d6..4681857acc1 100644 --- a/src/builder/value_parser.rs +++ b/src/builder/value_parser.rs @@ -508,6 +508,41 @@ where } } +/// Create a [`ValueParser`] with [`PossibleValuesParser`] +/// +/// See [`PossibleValuesParser`] for more flexibility in creating the +/// [`PossibleValue`][crate::builder::PossibleValue]s. +/// +/// # Examples +/// +/// ```rust +/// let possible = vec!["always", "auto", "never"]; +/// let mut cmd = clap::Command::new("raw") +/// .arg( +/// clap::Arg::new("color") +/// .long("color") +/// .value_parser(possible) +/// .default_value("auto") +/// ); +/// +/// let m = cmd.try_get_matches_from_mut( +/// ["cmd", "--color", "never"] +/// ).unwrap(); +/// +/// let color: &String = m.get_one("color") +/// .expect("default"); +/// assert_eq!(color, "never"); +/// ``` +impl

From> for ValueParser +where + P: Into, +{ + fn from(values: Vec

) -> Self { + let inner = PossibleValuesParser::from(values); + Self::from(inner) + } +} + impl std::fmt::Debug for ValueParser { fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { match &self.0 {