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  }