drop setScalar
This commit is contained in:
parent
b1eda2c7b6
commit
6f2f3b4bf6
15
parse.go
15
parse.go
|
@ -159,7 +159,7 @@ func NewParser(config Config, dests ...interface{}) (*Parser, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether this field is supported. It's good to do this here rather than
|
// Check whether this field is supported. It's good to do this here rather than
|
||||||
// wait until setScalar because it means that a program with invalid argument
|
// wait until ParseValue because it means that a program with invalid argument
|
||||||
// fields will always fail regardless of whether the arguments it received
|
// fields will always fail regardless of whether the arguments it received
|
||||||
// exercised those fields.
|
// exercised those fields.
|
||||||
var parseable bool
|
var parseable bool
|
||||||
|
@ -275,7 +275,7 @@ func process(specs []*spec, args []string) error {
|
||||||
}
|
}
|
||||||
if spec.env != "" {
|
if spec.env != "" {
|
||||||
if value, found := os.LookupEnv(spec.env); found {
|
if value, found := os.LookupEnv(spec.env); found {
|
||||||
err := setScalar(spec.dest, value)
|
err := scalar.ParseValue(spec.dest, value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error processing environment variable %s: %v", spec.env, err)
|
return fmt.Errorf("error processing environment variable %s: %v", spec.env, err)
|
||||||
}
|
}
|
||||||
|
@ -355,7 +355,7 @@ func process(specs []*spec, args []string) error {
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
err := setScalar(spec.dest, value)
|
err := scalar.ParseValue(spec.dest, value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error processing %s: %v", arg, err)
|
return fmt.Errorf("error processing %s: %v", arg, err)
|
||||||
}
|
}
|
||||||
|
@ -374,7 +374,7 @@ func process(specs []*spec, args []string) error {
|
||||||
}
|
}
|
||||||
positionals = nil
|
positionals = nil
|
||||||
} else if len(positionals) > 0 {
|
} else if len(positionals) > 0 {
|
||||||
err := setScalar(spec.dest, positionals[0])
|
err := scalar.ParseValue(spec.dest, positionals[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error processing %s: %v", spec.long, err)
|
return fmt.Errorf("error processing %s: %v", spec.long, err)
|
||||||
}
|
}
|
||||||
|
@ -438,7 +438,7 @@ func setSlice(dest reflect.Value, values []string, trunc bool) error {
|
||||||
|
|
||||||
for _, s := range values {
|
for _, s := range values {
|
||||||
v := reflect.New(elem)
|
v := reflect.New(elem)
|
||||||
if err := setScalar(v.Elem(), s); err != nil {
|
if err := scalar.ParseValue(v.Elem(), s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !ptr {
|
if !ptr {
|
||||||
|
@ -500,8 +500,3 @@ func isScalar(t reflect.Type) (parseable, boolean bool) {
|
||||||
return parseable, false
|
return parseable, false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set a value from a string
|
|
||||||
func setScalar(v reflect.Value, s string) error {
|
|
||||||
return scalar.ParseValue(v, s)
|
|
||||||
}
|
|
||||||
|
|
|
@ -599,6 +599,19 @@ func TestTextUnmarshaler(t *testing.T) {
|
||||||
assert.Equal(t, 3, args.Foo.val)
|
assert.Equal(t, 3, args.Foo.val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRepeatedTextUnmarshaler(t *testing.T) {
|
||||||
|
// fields that implement TextUnmarshaler should be parsed using that interface
|
||||||
|
var args struct {
|
||||||
|
Foo []*textUnmarshaler
|
||||||
|
}
|
||||||
|
err := parse("--foo abc d ef", &args)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, args.Foo, 3)
|
||||||
|
assert.Equal(t, 3, args.Foo[0].val)
|
||||||
|
assert.Equal(t, 1, args.Foo[1].val)
|
||||||
|
assert.Equal(t, 2, args.Foo[2].val)
|
||||||
|
}
|
||||||
|
|
||||||
type boolUnmarshaler bool
|
type boolUnmarshaler bool
|
||||||
|
|
||||||
func (p *boolUnmarshaler) UnmarshalText(b []byte) error {
|
func (p *boolUnmarshaler) UnmarshalText(b []byte) error {
|
||||||
|
|
Loading…
Reference in New Issue