aboutsummaryrefslogtreecommitdiffstats
path: root/cli/parser.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-01-18 22:17:50 +0100
committerPetter Rasmussen2016-01-18 22:17:50 +0100
commit2be43fe18545ba6c35ee344b9880d48a18afe878 (patch)
treeefa21a89daa54ba3e6ae1027a629b3d3a3fd83f4 /cli/parser.go
parent4f4152ccf32acbd392c7d80e45834ca1f3ea2d62 (diff)
downloadgdrive-2be43fe18545ba6c35ee344b9880d48a18afe878.tar.bz2
Store captured values as interface{} and type cast
Diffstat (limited to 'cli/parser.go')
-rw-r--r--cli/parser.go41
1 files changed, 21 insertions, 20 deletions
diff --git a/cli/parser.go b/cli/parser.go
index 433a4b1..ff50eec 100644
--- a/cli/parser.go
+++ b/cli/parser.go
@@ -7,7 +7,7 @@ import (
type Parser interface {
Match([]string) ([]string, bool)
- Capture([]string) ([]string, map[string]string)
+ Capture([]string) ([]string, map[string]interface{})
}
type CompleteParser struct {
@@ -28,12 +28,12 @@ func (self CompleteParser) Match(values []string) ([]string, bool) {
return remainingValues, len(remainingValues) == 0
}
-func (self CompleteParser) Capture(values []string) ([]string, map[string]string) {
+func (self CompleteParser) Capture(values []string) ([]string, map[string]interface{}) {
remainingValues := values
- data := map[string]string{}
+ data := map[string]interface{}{}
for _, parser := range self.parsers {
- var captured map[string]string
+ var captured map[string]interface{}
remainingValues, captured = parser.Capture(remainingValues)
for key, value := range captured {
data[key] = value
@@ -64,7 +64,7 @@ func (self EqualParser) Match(values []string) ([]string, bool) {
return values, false
}
-func (self EqualParser) Capture(values []string) ([]string, map[string]string) {
+func (self EqualParser) Capture(values []string) ([]string, map[string]interface{}) {
remainingValues, _ := self.Match(values)
return remainingValues, nil
}
@@ -90,9 +90,9 @@ func (self CaptureGroupParser) key() string {
return self.value[1:len(self.value) - 1]
}
-func (self CaptureGroupParser) Capture(values []string) ([]string, map[string]string) {
+func (self CaptureGroupParser) Capture(values []string) ([]string, map[string]interface{}) {
if remainingValues, ok := self.Match(values); ok {
- return remainingValues, map[string]string{self.key(): values[0]}
+ return remainingValues, map[string]interface{}{self.key(): values[0]}
}
return values, nil
@@ -140,12 +140,12 @@ func (self BoolFlagParser) Match(values []string) ([]string, bool) {
}
}
-func (self BoolFlagParser) Capture(values []string) ([]string, map[string]string) {
+func (self BoolFlagParser) Capture(values []string) ([]string, map[string]interface{}) {
remainingValues, ok := self.Match(values)
if !ok && !self.omitValue {
- return remainingValues, map[string]string{self.key: fmt.Sprintf("%t", self.defaultValue)}
+ return remainingValues, map[string]interface{}{self.key: self.defaultValue}
}
- return remainingValues, map[string]string{self.key: fmt.Sprintf("%t", ok)}
+ return remainingValues, map[string]interface{}{self.key: ok}
}
func (self BoolFlagParser) String() string {
@@ -170,13 +170,13 @@ func (self StringFlagParser) Match(values []string) ([]string, bool) {
return values[2:], true
}
-func (self StringFlagParser) Capture(values []string) ([]string, map[string]string) {
+func (self StringFlagParser) Capture(values []string) ([]string, map[string]interface{}) {
remainingValues, ok := self.Match(values)
if ok {
- return remainingValues, map[string]string{self.key: values[1]}
+ return remainingValues, map[string]interface{}{self.key: values[1]}
}
- return values, map[string]string{self.key: self.defaultValue}
+ return values, map[string]interface{}{self.key: self.defaultValue}
}
func (self StringFlagParser) String() string {
@@ -206,13 +206,14 @@ func (self IntFlagParser) Match(values []string) ([]string, bool) {
return values[2:], true
}
-func (self IntFlagParser) Capture(values []string) ([]string, map[string]string) {
+func (self IntFlagParser) Capture(values []string) ([]string, map[string]interface{}) {
remainingValues, ok := self.Match(values)
if ok {
- return remainingValues, map[string]string{self.key: values[1]}
+ n, _ := strconv.ParseInt(values[1], 10, 64)
+ return remainingValues, map[string]interface{}{self.key: n}
}
- return values, map[string]string{self.key: fmt.Sprintf("%d", self.defaultValue)}
+ return values, map[string]interface{}{self.key: self.defaultValue}
}
func (self IntFlagParser) String() string {
@@ -244,12 +245,12 @@ func (self FlagParser) Match(values []string) ([]string, bool) {
return remainingValues, true
}
-func (self FlagParser) Capture(values []string) ([]string, map[string]string) {
- data := map[string]string{}
+func (self FlagParser) Capture(values []string) ([]string, map[string]interface{}) {
+ data := map[string]interface{}{}
remainingValues := values
for _, parser := range self.parsers {
- var captured map[string]string
+ var captured map[string]interface{}
remainingValues, captured = parser.Capture(remainingValues)
for key, value := range captured {
// Skip value if it already exists and new value is an empty string
@@ -286,7 +287,7 @@ func (self ShortCircuitParser) Match(values []string) ([]string, bool) {
return remainingValues, false
}
-func (self ShortCircuitParser) Capture(values []string) ([]string, map[string]string) {
+func (self ShortCircuitParser) Capture(values []string) ([]string, map[string]interface{}) {
if len(self.parsers) == 0 {
return values, nil
}