Skip to content

Commit

Permalink
added StringArray func
Browse files Browse the repository at this point in the history
  • Loading branch information
pjdufour committed Sep 15, 2018
1 parent 298182f commit 84fadfb
Show file tree
Hide file tree
Showing 31 changed files with 109 additions and 9 deletions.
2 changes: 2 additions & 0 deletions bool.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ func (b *boolValue) Type() string {

func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }

func (b *boolValue) StringArray() []string { return []string{b.String()} }

func (b *boolValue) IsBoolFlag() bool { return true }

func boolConv(sval string) (interface{}, error) {
Expand Down
10 changes: 8 additions & 2 deletions bool_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,20 @@ func (s *boolSliceValue) Type() string {
}

// String defines a "native" format for this boolean slice flag value.
func (s *boolSliceValue) String() string {
func (s *boolSliceValue) StringArray() []string {

boolStrSlice := make([]string, len(*s.value))
for i, b := range *s.value {
boolStrSlice[i] = strconv.FormatBool(b)
}

out, _ := writeAsCSV(boolStrSlice)
return boolStrSlice
}

// String defines a "native" format for this boolean slice flag value.
func (s *boolSliceValue) String() string {

out, _ := writeAsCSV(s.StringArray())

return "[" + out + "]"
}
Expand Down
10 changes: 10 additions & 0 deletions bytes.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ func (bytesHex bytesHexValue) String() string {
return fmt.Sprintf("%X", []byte(bytesHex))
}

// StringArray implements pflag.Value.StringArray.
func (bytesHex bytesHexValue) StringArray() []string {
return []string{bytesHex.String()}
}

// Set implements pflag.Value.Set.
func (bytesHex *bytesHexValue) Set(value string) error {
bin, err := hex.DecodeString(strings.TrimSpace(value))
Expand Down Expand Up @@ -116,6 +121,11 @@ func (bytesBase64 bytesBase64Value) String() string {
return base64.StdEncoding.EncodeToString([]byte(bytesBase64))
}

// String implements pflag.Value.StringArray.
func (bytesBase64 bytesBase64Value) StringArray() []string {
return []string{bytesBase64.String()}
}

// Set implements pflag.Value.Set.
func (bytesBase64 *bytesBase64Value) Set(value string) error {
bin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))
Expand Down
2 changes: 2 additions & 0 deletions count.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ func (i *countValue) Type() string {

func (i *countValue) String() string { return strconv.Itoa(int(*i)) }

func (i *countValue) StringArray() []string { return []string{i.String()} }

func countConv(sval string) (interface{}, error) {
i, err := strconv.Atoi(sval)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions duration.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ func (d *durationValue) Type() string {

func (d *durationValue) String() string { return (*time.Duration)(d).String() }

func (d *durationValue) StringArray() []string { return []string{d.String()} }

func durationConv(sval string) (interface{}, error) {
return time.ParseDuration(sval)
}
Expand Down
7 changes: 6 additions & 1 deletion duration_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,16 @@ func (s *durationSliceValue) Type() string {
return "durationSlice"
}

func (s *durationSliceValue) String() string {
func (s *durationSliceValue) StringArray() []string {
out := make([]string, len(*s.value))
for i, d := range *s.value {
out[i] = fmt.Sprintf("%s", d)
}
return out
}

func (s *durationSliceValue) String() string {
out := s.StringArray()
return "[" + strings.Join(out, ",") + "]"
}

Expand Down
1 change: 1 addition & 0 deletions flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ type Flag struct {
// (The default value is represented as a string.)
type Value interface {
String() string
StringArray() []string
Set(string) error
Type() string
}
Expand Down
2 changes: 2 additions & 0 deletions float32.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (f *float32Value) Type() string {

func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }

func (f *float32Value) StringArray() []string { return []string{f.String()} }

func float32Conv(sval string) (interface{}, error) {
v, err := strconv.ParseFloat(sval, 32)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions float64.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (f *float64Value) Type() string {

func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }

func (f *float64Value) StringArray() []string { return []string{f.String()} }

func float64Conv(sval string) (interface{}, error) {
return strconv.ParseFloat(sval, 64)
}
Expand Down
4 changes: 4 additions & 0 deletions golangflag.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ func (v *flagValueWrapper) String() string {
return v.inner.String()
}

func (v *flagValueWrapper) StringArray() []string {
return []string{v.inner.String()}
}

func (v *flagValueWrapper) Set(s string) error {
return v.inner.Set(s)
}
Expand Down
2 changes: 2 additions & 0 deletions int.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *intValue) Type() string {

func (i *intValue) String() string { return strconv.Itoa(int(*i)) }

func (i *intValue) StringArray() []string { return []string{i.String()} }

func intConv(sval string) (interface{}, error) {
return strconv.Atoi(sval)
}
Expand Down
2 changes: 2 additions & 0 deletions int16.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *int16Value) Type() string {

func (i *int16Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func (i *int16Value) StringArray() []string { return []string{i.String()} }

func int16Conv(sval string) (interface{}, error) {
v, err := strconv.ParseInt(sval, 0, 16)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions int32.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *int32Value) Type() string {

func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func (i *int32Value) StringArray() []string { return []string{i.String()} }

func int32Conv(sval string) (interface{}, error) {
v, err := strconv.ParseInt(sval, 0, 32)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions int64.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *int64Value) Type() string {

func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func (i *int64Value) StringArray() []string { return []string{i.String()} }

func int64Conv(sval string) (interface{}, error) {
return strconv.ParseInt(sval, 0, 64)
}
Expand Down
2 changes: 2 additions & 0 deletions int8.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *int8Value) Type() string {

func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func (i *int8Value) StringArray() []string { return []string{i.String()} }

func int8Conv(sval string) (interface{}, error) {
v, err := strconv.ParseInt(sval, 0, 8)
if err != nil {
Expand Down
7 changes: 6 additions & 1 deletion int_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,16 @@ func (s *intSliceValue) Type() string {
}

func (s *intSliceValue) String() string {
out := s.StringArray()
return "[" + strings.Join(out, ",") + "]"
}

func (s *intSliceValue) StringArray() []string {
out := make([]string, len(*s.value))
for i, d := range *s.value {
out[i] = fmt.Sprintf("%d", d)
}
return "[" + strings.Join(out, ",") + "]"
return out
}

func intSliceConv(val string) (interface{}, error) {
Expand Down
3 changes: 3 additions & 0 deletions ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ func newIPValue(val net.IP, p *net.IP) *ipValue {
}

func (i *ipValue) String() string { return net.IP(*i).String() }

func (i *ipValue) StringArray() []string { return []string{i.String()} }

func (i *ipValue) Set(s string) error {
ip := net.ParseIP(strings.TrimSpace(s))
if ip == nil {
Expand Down
12 changes: 9 additions & 3 deletions ip_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,20 @@ func (s *ipSliceValue) Type() string {
// String defines a "native" format for this net.IP slice flag value.
func (s *ipSliceValue) String() string {

out, _ := writeAsCSV(s.StringArray())

return "[" + out + "]"
}

// StringArray defines a "native" format for this net.IP slice flag value.
func (s *ipSliceValue) StringArray() []string {

ipStrSlice := make([]string, len(*s.value))
for i, ip := range *s.value {
ipStrSlice[i] = ip.String()
}

out, _ := writeAsCSV(ipStrSlice)

return "[" + out + "]"
return ipStrSlice
}

func ipSliceConv(val string) (interface{}, error) {
Expand Down
3 changes: 3 additions & 0 deletions ipmask.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ func newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {
}

func (i *ipMaskValue) String() string { return net.IPMask(*i).String() }

func (i *ipMaskValue) StringArray() []string { return []string{i.String()} }

func (i *ipMaskValue) Set(s string) error {
ip := ParseIPv4Mask(s)
if ip == nil {
Expand Down
4 changes: 4 additions & 0 deletions ipnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ func (ipnet ipNetValue) String() string {
return n.String()
}

func (ipnet ipNetValue) StringArray() []string {
return []string{ipnet.String()}
}

func (ipnet *ipNetValue) Set(value string) error {
_, n, err := net.ParseCIDR(strings.TrimSpace(value))
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions string.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ func (s *stringValue) Type() string {

func (s *stringValue) String() string { return string(*s) }

func (s *stringValue) StringArray() []string { return []string{s.String()} }

func stringConv(sval string) (interface{}, error) {
return sval, nil
}
Expand Down
6 changes: 5 additions & 1 deletion string_array.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,14 @@ func (s *stringArrayValue) Type() string {
}

func (s *stringArrayValue) String() string {
str, _ := writeAsCSV(*s.value)
str, _ := writeAsCSV(s.StringArray())
return "[" + str + "]"
}

func (s *stringArrayValue) StringArray() []string {
return *s.value
}

func stringArrayConv(sval string) (interface{}, error) {
sval = sval[1 : len(sval)-1]
// An empty string would cause a array with one (empty) string
Expand Down
4 changes: 4 additions & 0 deletions string_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ func (s *stringSliceValue) String() string {
return "[" + str + "]"
}

func (s *stringSliceValue) StringArray() []string {
return *s.value
}

func stringSliceConv(sval string) (interface{}, error) {
sval = sval[1 : len(sval)-1]
// An empty string would cause a slice with one (empty) string
Expand Down
4 changes: 4 additions & 0 deletions string_to_int.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ func (s *stringToIntValue) String() string {
return "[" + buf.String() + "]"
}

func (s *stringToIntValue) StringArray() []string {
return []string{s.String()}
}

func stringToIntConv(val string) (interface{}, error) {
val = strings.Trim(val, "[]")
// An empty string would cause an empty map
Expand Down
4 changes: 4 additions & 0 deletions string_to_string.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ func (s *stringToStringValue) String() string {
return "[" + strings.TrimSpace(buf.String()) + "]"
}

func (s *stringToStringValue) StringArray() []string {
return []string{s.String()}
}

func stringToStringConv(val string) (interface{}, error) {
val = strings.Trim(val, "[]")
// An empty string would cause an empty map
Expand Down
2 changes: 2 additions & 0 deletions uint.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *uintValue) Type() string {

func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }

func (i *uintValue) StringArray() []string { return []string{i.String()} }

func uintConv(sval string) (interface{}, error) {
v, err := strconv.ParseUint(sval, 0, 0)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions uint16.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *uint16Value) Type() string {

func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func (i *uint16Value) StringArray() []string { return []string{i.String()} }

func uint16Conv(sval string) (interface{}, error) {
v, err := strconv.ParseUint(sval, 0, 16)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions uint32.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *uint32Value) Type() string {

func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func (i *uint32Value) StringArray() []string { return []string{i.String()} }

func uint32Conv(sval string) (interface{}, error) {
v, err := strconv.ParseUint(sval, 0, 32)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions uint64.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *uint64Value) Type() string {

func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func (i *uint64Value) StringArray() []string { return []string{i.String()} }

func uint64Conv(sval string) (interface{}, error) {
v, err := strconv.ParseUint(sval, 0, 64)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions uint8.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ func (i *uint8Value) Type() string {

func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func (i *uint8Value) StringArray() []string { return []string{i.String()} }

func uint8Conv(sval string) (interface{}, error) {
v, err := strconv.ParseUint(sval, 0, 8)
if err != nil {
Expand Down
7 changes: 6 additions & 1 deletion uint_slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,16 @@ func (s *uintSliceValue) Type() string {
}

func (s *uintSliceValue) String() string {
out := s.StringArray()
return "[" + strings.Join(out, ",") + "]"
}

func (s *uintSliceValue) StringArray() []string {
out := make([]string, len(*s.value))
for i, d := range *s.value {
out[i] = fmt.Sprintf("%d", d)
}
return "[" + strings.Join(out, ",") + "]"
return out
}

func uintSliceConv(val string) (interface{}, error) {
Expand Down

0 comments on commit 84fadfb

Please sign in to comment.