github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/fla9/sizeflag.go (about) 1 package fla9 2 3 import ( 4 "github.com/bingoohuang/gg/pkg/man" 5 ) 6 7 func NewSizeFlag(up *uint64, val string) Value { 8 if val != "" { 9 *up, _ = man.ParseBytes(val) 10 } 11 return &SizeFlag{Val: up} 12 } 13 14 type SizeFlag struct { 15 Val *uint64 16 } 17 18 func (i *SizeFlag) String() string { 19 if i.Val == nil { 20 return "0" 21 } 22 return man.Bytes(*i.Val) 23 } 24 25 func (i *SizeFlag) Set(value string) (err error) { 26 *i.Val, err = man.ParseBytes(value) 27 return err 28 } 29 30 // SizeVar defines a size flag with specified name, default value, and usage string. 31 // The argument p points to an uint64 variable in which to store the value of the flag. 32 func SizeVar(p *uint64, name string, value string, usage string) { 33 CommandLine.Var(NewSizeFlag(p, value), name, usage) 34 } 35 36 // Size defines a size flag with specified name, default value, and usage string. 37 // The return value is the address of an uint64 variable that stores the value of the flag. 38 func Size(name string, value string, usage string) *uint64 { 39 return CommandLine.Size(name, value, usage) 40 } 41 42 // SizeVar defines an uint64 flag with specified name, default value, and usage string. 43 // The argument p points to an uint64 variable in which to store the value of the flag. 44 func (f *FlagSet) SizeVar(p *uint64, name string, value string, usage string) { 45 f.Var(NewSizeFlag(p, value), name, usage) 46 } 47 48 // Size defines a size flag with specified name, default value, and usage string. 49 // The return value is the address of an uint64 variable that stores the value of the flag. 50 func (f *FlagSet) Size(name string, value string, usage string) *uint64 { 51 p := new(uint64) 52 f.SizeVar(p, name, value, usage) 53 return p 54 }