src.dualinventive.com/go/redis-proxy/cmd/redis-stress-test/arrayflags.go

50 lines
1.0 KiB
Go

package main
import (
"bytes"
"flag"
"fmt"
)
type arrayFlags struct {
name string
v *[]string
setCalled bool
}
func (i *arrayFlags) String() string {
if i.v == nil {
return ""
}
var buffer bytes.Buffer
for _, cmd := range *i.v {
if _, err := buffer.WriteString(fmt.Sprintf("-%s %s ", i.name, cmd)); err != nil {
panic("error parsing array flags")
}
}
return buffer.String()
}
func (i *arrayFlags) Set(value string) error {
if !i.setCalled {
*i.v = (*i.v)[:0]
i.setCalled = true
}
*i.v = append(*i.v, value)
return nil
}
func newArrayFlag(name string, val []string, p *[]string) *arrayFlags {
*p = val
a := &arrayFlags{name: name, v: p}
return a
}
// ArrayVar defines an []string flag with specified name, default value, and usage string.
// The return value is the address of an []string variable that stores the value of the flag.
func ArrayVar(name string, value []string, usage string) *[]string {
p := new([]string)
flag.CommandLine.Var(newArrayFlag(name, value, p), name, usage)
return p
}