...
1 package utils
2
3 import (
4 "flag"
5 "fmt"
6 "strconv"
7 "strings"
8 )
9
10
11 func FlagHex(name, help string) *flaghex {
12 res := &flaghex{isset: false, name: name, help: help}
13 flag.Var(res, name, help)
14 return res
15 }
16
17 type flaghex struct {
18 name string
19 help string
20 value uint32
21 isset bool
22 }
23
24 func (fh *flaghex) Set(s string) error {
25 var err error
26 var res uint64
27 if strings.HasPrefix(s, "0x") {
28 s = s[2:]
29 res, err = strconv.ParseUint(s, 16, 32)
30 } else {
31 res, err = strconv.ParseUint(s, 10, 32)
32 if err != nil {
33 res, err = strconv.ParseUint(s, 16, 32)
34 }
35 }
36 fh.value = uint32(res)
37 if err == nil {
38 fh.isset = true
39 }
40 return err
41 }
42 func (fh *flaghex) IsSet() bool {
43 return fh.isset
44 }
45 func (fh *flaghex) String() string {
46 return fmt.Sprintf("%s %d", fh.help, fh.value)
47 }
48 func (fh *flaghex) Value() uint32 {
49 return fh.value
50 }
51
View as plain text