diff --git a/clap_builder/src/builder/value_parser.rs b/clap_builder/src/builder/value_parser.rs index 4b095578941..ffe8d7b3f2e 100644 --- a/clap_builder/src/builder/value_parser.rs +++ b/clap_builder/src/builder/value_parser.rs @@ -2215,6 +2215,28 @@ impl ValueParserFactory for u64 { RangedU64ValueParser::new() } } +impl ValueParserFactory for Box +where + T: ValueParserFactory, + ::Parser: TypedValueParser, + T: Send + Sync + Clone, +{ + type Parser = MapValueParser<::Parser, fn(T) -> Box>; + fn value_parser() -> Self::Parser { + T::value_parser().map(Box::new) + } +} +impl ValueParserFactory for std::sync::Arc +where + T: ValueParserFactory, + ::Parser: TypedValueParser, + T: Send + Sync + Clone, +{ + type Parser = MapValueParser<::Parser, fn(T) -> std::sync::Arc>; + fn value_parser() -> Self::Parser { + T::value_parser().map(std::sync::Arc::new) + } +} #[doc(hidden)] #[derive(Debug)]