From 7556cab45e140d45e163e4a5ce86c07a60862d79 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Sat, 17 Nov 2018 10:02:35 +0100 Subject: [PATCH] getopts: allow "-option" and "--option" --- src/getopts.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/getopts.rs b/src/getopts.rs index bad596f8..13a13482 100644 --- a/src/getopts.rs +++ b/src/getopts.rs @@ -16,21 +16,24 @@ fn parse_argument(arg: &str) -> RawArgument { let length = chars.len(); - if length >= 2 && chars[0] == '-' && chars[1] == '-' { + if length >= 2 { if length == 2 { return RawArgument::Separator; } - for start in 2..length { - if chars[start] == '=' { - let name: String = chars[2..start].iter().collect(); - let value: String = chars[start+1..length].iter().collect(); - return RawArgument::Option { name, value: Some(value) } + if chars[0] == '-' { + let first = if chars[1] == '-' { 2 } else { 1 }; + + for start in first..length { + if chars[start] == '=' { + let name: String = chars[first..start].iter().collect(); + let value: String = chars[start+1..length].iter().collect(); + return RawArgument::Option { name, value: Some(value) } + } } + + let name: String = chars[first..].iter().collect(); + return RawArgument::Option { name: name, value: None } } - - let name: String = chars[2..].iter().collect(); - return RawArgument::Option { name: name, value: None } - } RawArgument::Argument { value: arg.to_string() }