diff options
| author | Alex Flint <[email protected]> | 2017-02-17 20:57:21 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-02-17 20:57:21 -0800 |
| commit | 2c249ee1fcc1d48bb2e8071c3396f7c97a383dd3 (patch) | |
| tree | ab73e8fc3d578d10e172553c2a6ddcd886b9136f /parse.go | |
| parent | 765ccf745937c16486999600ecf789c646ac2e6c (diff) | |
| parent | 44a8b85d8250005629dd43d78b3e305bc57e1e24 (diff) | |
Merge pull request #46 from alexflint/vendoring
vendor in dependencies
Diffstat (limited to 'parse.go')
| -rw-r--r-- | parse.go | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -1,12 +1,15 @@ package arg import ( + "encoding" "errors" "fmt" "os" "path/filepath" "reflect" "strings" + + scalar "github.com/alexflint/go-scalar" ) // spec represents a command line option @@ -442,3 +445,25 @@ func canParse(t reflect.Type) (parseable, boolean, multiple bool) { return false, false, false } + +var textUnmarshalerType = reflect.TypeOf([]encoding.TextUnmarshaler{}).Elem() + +// isScalar returns true if the type can be parsed from a single string +func isScalar(t reflect.Type) (parseable, boolean bool) { + parseable = scalar.CanParse(t) + switch { + case t.Implements(textUnmarshalerType): + return parseable, false + case t.Kind() == reflect.Bool: + return parseable, true + case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Bool: + return parseable, true + default: + return parseable, false + } +} + +// set a value from a string +func setScalar(v reflect.Value, s string) error { + return scalar.ParseValue(v, s) +} |
