Currently cli silently (aside from IntSlice and Int64Slice which oddly
printed directly to the error stream) ignores failures that occur when
parsing environment variables for their value for flags that define
environment variables. Instead, we should propogate up the error to the
user.
This is accomplished in a backwards compatible manner by adding a new,
internal, interface which defines an applyWithError function that all
flags here define. In v2, when we can modify the interface, we can drop
this secondary interface and modify `Apply` to return an error.
{"foobar",true,BoolFlag{Name:"debug",EnvVar:"DEBUG"},fmt.Errorf(`could not parse foobar as bool value for flag debug: strconv.ParseBool: parsing "foobar": invalid syntax`)},
{"foobar",true,BoolTFlag{Name:"debug",EnvVar:"DEBUG"},fmt.Errorf(`could not parse foobar as bool value for flag debug: strconv.ParseBool: parsing "foobar": invalid syntax`)},
{"foobar",false,DurationFlag{Name:"time",EnvVar:"TIME"},fmt.Errorf(`could not parse foobar as duration for flag time: time: invalid duration foobar`)},
{"foobar",0,Float64Flag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as float64 value for flag seconds: strconv.ParseFloat: parsing "foobar": invalid syntax`)},
{"1.2",0,Int64Flag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2 as int value for flag seconds: strconv.ParseInt: parsing "1.2": invalid syntax`)},
{"foobar",0,Int64Flag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as int value for flag seconds: strconv.ParseInt: parsing "foobar": invalid syntax`)},
{"1.2",0,IntFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2 as int value for flag seconds: strconv.ParseInt: parsing "1.2": invalid syntax`)},
{"foobar",0,IntFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as int value for flag seconds: strconv.ParseInt: parsing "foobar": invalid syntax`)},
{"1.2,2",IntSlice{},IntSliceFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2,2 as int slice value for flag seconds: strconv.ParseInt: parsing "1.2": invalid syntax`)},
{"foobar",IntSlice{},IntSliceFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as int slice value for flag seconds: strconv.ParseInt: parsing "foobar": invalid syntax`)},
{"1.2,2",Int64Slice{},Int64SliceFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2,2 as int64 slice value for flag seconds: strconv.ParseInt: parsing "1.2": invalid syntax`)},
{"foobar",Int64Slice{},Int64SliceFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as int64 slice value for flag seconds: strconv.ParseInt: parsing "foobar": invalid syntax`)},
{"1.2",0,UintFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2 as uint value for flag seconds: strconv.ParseUint: parsing "1.2": invalid syntax`)},
{"foobar",0,UintFlag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as uint value for flag seconds: strconv.ParseUint: parsing "foobar": invalid syntax`)},
{"1.2",0,Uint64Flag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse 1.2 as uint64 value for flag seconds: strconv.ParseUint: parsing "1.2": invalid syntax`)},
{"foobar",0,Uint64Flag{Name:"seconds",EnvVar:"SECONDS"},fmt.Errorf(`could not parse foobar as uint64 value for flag seconds: strconv.ParseUint: parsing "foobar": invalid syntax`)},