package utils import ( "flag" "fmt" "strconv" "strings" ) // creates a flag that can parse 0xFFFFFF (32bit) values func FlagHex(name, help string) *flaghex { res := &flaghex{isset: false, name: name, help: help} flag.Var(res, name, help) return res } type flaghex struct { name string help string value uint32 isset bool } func (fh *flaghex) Set(s string) error { var err error var res uint64 if strings.HasPrefix(s, "0x") { s = s[2:] res, err = strconv.ParseUint(s, 16, 32) } else { res, err = strconv.ParseUint(s, 10, 32) if err != nil { res, err = strconv.ParseUint(s, 16, 32) } } fh.value = uint32(res) if err == nil { fh.isset = true } return err } func (fh *flaghex) IsSet() bool { return fh.isset } func (fh *flaghex) String() string { return fmt.Sprintf("%s %d", fh.help, fh.value) } func (fh *flaghex) Value() uint32 { return fh.value }