diff options
| -rw-r--r-- | mingling/src/parser/args.rs | 9 | ||||
| -rw-r--r-- | mingling_core/src/program/flag.rs | 18 |
2 files changed, 24 insertions, 3 deletions
diff --git a/mingling/src/parser/args.rs b/mingling/src/parser/args.rs index 084051d..f795b54 100644 --- a/mingling/src/parser/args.rs +++ b/mingling/src/parser/args.rs @@ -104,9 +104,14 @@ impl Argument { } let flag: Flag = flag.into(); - for argument in flag.iter() { - let value = special_arguments!(self.vec, argument); + if flag.len() < 1 { + let value = special_arguments!(self.vec, ""); str_result.extend(value); + } else { + for argument in flag.iter() { + let value = special_arguments!(self.vec, argument); + str_result.extend(value); + } } str_result diff --git a/mingling_core/src/program/flag.rs b/mingling_core/src/program/flag.rs index edc3dfd..41e8060 100644 --- a/mingling_core/src/program/flag.rs +++ b/mingling_core/src/program/flag.rs @@ -141,7 +141,7 @@ macro_rules! special_arguments { while i < $args.len() { if &$args[i] == flag { $args.remove(i); - while i < $args.len() && !$args[i].starts_with('-') { + while i < $args.len() && (flag.is_empty() || !$args[i].starts_with('-')) { values.push($args[i].clone()); $args.remove(i); } @@ -149,6 +149,11 @@ macro_rules! special_arguments { } i += 1; } + if flag.is_empty() { + while !$args.is_empty() && !$args[0].starts_with('-') { + values.push($args.remove(0)); + } + } values }}; } @@ -448,6 +453,17 @@ mod tests { let result = special_arguments!(args, "--list"); assert_eq!(result, Vec::<String>::new()); assert_eq!(args, vec!["-a", "-b", "--next", "1"]); + + // Test extracting with empty flag + let mut args = vec![ + "a".to_string(), + "b".to_string(), + "--next".to_string(), + "1".to_string(), + ]; + let result = special_arguments!(args, ""); + assert_eq!(result, vec!["a", "b"]); + assert_eq!(args, vec!["--next", "1"]); } } |
