35 lines
613 B
Go
35 lines
613 B
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/go-errors/errors"
|
|
)
|
|
|
|
// Ref: https://github.com/spf13/pflag/issues/236#issuecomment-931600452
|
|
type EnumFlag struct {
|
|
Allowed []string
|
|
Value string
|
|
}
|
|
|
|
func (a EnumFlag) String() string {
|
|
return a.Value
|
|
}
|
|
|
|
func (a *EnumFlag) Set(p string) error {
|
|
if !SliceContains(a.Allowed, p) {
|
|
return errors.Errorf("must be one of [ %s ]", strings.Join(a.Allowed, " | "))
|
|
}
|
|
a.Value = p
|
|
return nil
|
|
}
|
|
|
|
func (a *EnumFlag) Type() string {
|
|
values := strings.Join(a.Allowed, " | ")
|
|
if len(values) < 40 {
|
|
return fmt.Sprintf("[ %s ]", values)
|
|
}
|
|
return "string"
|
|
}
|