diff options
| author | Petter Rasmussen | 2016-01-18 23:03:44 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-01-18 23:03:44 +0100 |
| commit | 44aa7407f6bdbc5157104969ef275cd5e51a99af (patch) | |
| tree | f5fcf386febc68b8b3d8ef1e2362a6c5b5193252 /cli/parser.go | |
| parent | 2be43fe18545ba6c35ee344b9880d48a18afe878 (diff) | |
| download | gdrive-44aa7407f6bdbc5157104969ef275cd5e51a99af.tar.bz2 | |
Add StringSliceFlag and StringSliceParser
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 } |
