...
▽

Source file src/golang.conradwood.net/go-easyops/utils/flag_hex.go

Documentation: golang.conradwood.net/go-easyops/utils

     1  package utils
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  // creates a flag that can parse 0xFFFFFF (32bit) values
    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