summaryrefslogtreecommitdiff
path: root/vendor/github.com/jessevdk/go-flags/convert.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jessevdk/go-flags/convert.go')
-rw-r--r--vendor/github.com/jessevdk/go-flags/convert.go17
1 files changed, 13 insertions, 4 deletions
diff --git a/vendor/github.com/jessevdk/go-flags/convert.go b/vendor/github.com/jessevdk/go-flags/convert.go
index cda29b2f0..b27f698dc 100644
--- a/vendor/github.com/jessevdk/go-flags/convert.go
+++ b/vendor/github.com/jessevdk/go-flags/convert.go
@@ -53,7 +53,7 @@ func getBase(options multiTag, base int) (int, error) {
func convertMarshal(val reflect.Value) (bool, string, error) {
// Check first for the Marshaler interface
- if val.Type().NumMethod() > 0 && val.CanInterface() {
+ if val.IsValid() && val.Type().NumMethod() > 0 && val.CanInterface() {
if marshaler, ok := val.Interface().(Marshaler); ok {
ret, err := marshaler.MarshalFlag()
return true, ret, err
@@ -68,6 +68,10 @@ func convertToString(val reflect.Value, options multiTag) (string, error) {
return ret, err
}
+ if !val.IsValid() {
+ return "", nil
+ }
+
tp := val.Type()
// Support for time.Duration
@@ -220,7 +224,7 @@ func convert(val string, retval reflect.Value, options multiTag) error {
retval.SetBool(b)
}
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- base, err := getBase(options, 10)
+ base, err := getBase(options, 0)
if err != nil {
return err
@@ -234,7 +238,7 @@ func convert(val string, retval reflect.Value, options multiTag) error {
retval.SetInt(parsed)
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- base, err := getBase(options, 10)
+ base, err := getBase(options, 0)
if err != nil {
return err
@@ -267,7 +271,12 @@ func convert(val string, retval reflect.Value, options multiTag) error {
retval.Set(reflect.Append(retval, elemval))
case reflect.Map:
- parts := strings.SplitN(val, ":", 2)
+ keyValueDelimiter := options.Get("key-value-delimiter")
+ if keyValueDelimiter == "" {
+ keyValueDelimiter = ":"
+ }
+
+ parts := strings.SplitN(val, keyValueDelimiter, 2)
key := parts[0]
var value string