diff options
Diffstat (limited to 'cli/parser.go')
| -rw-r--r-- | cli/parser.go | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/cli/parser.go b/cli/parser.go index ff50eec..d6706d5 100644 --- a/cli/parser.go +++ b/cli/parser.go @@ -221,6 +221,52 @@ func (self IntFlagParser) String() string {  } +type StringSliceFlagParser struct { +    pattern string +    key string +    defaultValue []string +} + +func (self StringSliceFlagParser) Match(values []string) ([]string, bool) { +    if len(values) < 2 { +        return values, false +    } + +    var remainingValues []string + +    for i := 0; i < len(values); i++ { +        if values[i] == self.pattern && i + 1 < len(values) { +            i++ +            continue +        } +        remainingValues = append(remainingValues, values[i]) +    } + +    return remainingValues, len(values) != len(remainingValues) +} + +func (self StringSliceFlagParser) Capture(values []string) ([]string, map[string]interface{}) { +    remainingValues, ok := self.Match(values) +    if !ok { +        return values, map[string]interface{}{self.key: self.defaultValue} +    } + +    var captured []string + +    for i := 0; i < len(values); i++ { +        if values[i] == self.pattern && i + 1 < len(values) { +            captured = append(captured, values[i + 1]) +        } +    } + +    return remainingValues, map[string]interface{}{self.key: captured} +} + +func (self StringSliceFlagParser) String() string { +    return fmt.Sprintf("StringSliceFlagParser '%s'", self.pattern) +} + +  type FlagParser struct {      parsers []Parser  } | 
