pub trait TypedValueParser: Clone + Send + Sync + 'static {
    type Value;

    fn parse_ref(
        &self,
        cmd: &Command<'_>,
        arg: Option<&Arg<'_>>,
        value: &OsStr
    ) -> Result<Self::Value, Error>; fn parse(
        &self,
        cmd: &Command<'_>,
        arg: Option<&Arg<'_>>,
        value: OsString
    ) -> Result<Self::Value, Error> { ... } fn possible_values(
        &self
    ) -> Option<Box<dyn Iterator<Item = PossibleValue<'static>> + '_>> { ... } fn map<T, F>(self, func: F) -> MapValueParser<Self, F>
    where
        T: Send + Sync + Clone,
        F: Fn(Self::Value) -> T + Clone
, { ... } }
Expand description

Parse/validate argument values

Required Associated Types§

Argument’s value type

Required Methods§

Parse the argument value

When arg is None, an external subcommand value is being parsed.

Provided Methods§

Parse the argument value

When arg is None, an external subcommand value is being parsed.

Reflect on enumerated value properties

Error checking should not be done with this; it is mostly targeted at user-facing applications like errors and completion.

Adapt a TypedValueParser from one value to another

Example
let cmd = Command::new("mycmd")
    .arg(
        Arg::new("flag")
            .long("flag")
            .action(clap::ArgAction::Set)
            .value_parser(
                BoolishValueParser::new()
                .map(|b| -> usize {
                    if b { 10 } else { 5 }
                })
            )
    );

let matches = cmd.clone().try_get_matches_from(["mycmd", "--flag=true", "--flag=true"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
    matches.get_one::<usize>("flag").copied(),
    Some(10)
);

let matches = cmd.try_get_matches_from(["mycmd", "--flag=false"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
    matches.get_one::<usize>("flag").copied(),
    Some(5)
);

Implementors§