From a75d640838249eb0839b8d824ce1eb4a593fb922 Mon Sep 17 00:00:00 2001 From: John Didion Date: Wed, 13 Sep 2023 12:13:33 -0700 Subject: [PATCH] Fix parsing of CLI enum values (#35) Fix parsing of options with enum values - map selected value to the target type --- fqcv-cli/src/commands/align.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/fqcv-cli/src/commands/align.rs b/fqcv-cli/src/commands/align.rs index 91fdb5e..512f0a3 100644 --- a/fqcv-cli/src/commands/align.rs +++ b/fqcv-cli/src/commands/align.rs @@ -1,6 +1,9 @@ use super::command::{Command, ValueEnum}; use anyhow::Result; -use clap::{builder::PossibleValuesParser, Parser}; +use clap::{ + builder::{PossibleValuesParser, TypedValueParser as _}, + Parser, +}; use flume::unbounded; use fqcv_lib::{ align::{ @@ -209,7 +212,8 @@ pub struct Align { #[clap( long, short = 'm', - value_parser = PossibleValuesParser::new(AlignmentMode::possible_values()), + value_parser = PossibleValuesParser::new(AlignmentMode::possible_values()) + .map(|s| s.parse::().unwrap()), default_value_t = AlignmentMode::Local, ignore_case = true, display_order = 17, @@ -223,7 +227,8 @@ pub struct Align { #[clap( long, short = 'P', - value_parser = PossibleValuesParser::new(PrimaryPickingStrategy::possible_values()), + value_parser = PossibleValuesParser::new(PrimaryPickingStrategy::possible_values()) + .map(|s| s.parse::().unwrap()), default_value_t = PrimaryPickingStrategy::QueryLength, ignore_case = true, display_order = 18, @@ -447,3 +452,16 @@ impl Command for Align { Align::execute(self) } } + +#[cfg(test)] +mod tests { + use clap::Parser; + + use super::Align; + + /// Check that the argument parser works + #[test] + fn test_parse() { + Align::parse_from(["align", "-f", ".", "-r", "."]); + } +}