123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- package kingpin
- import (
- "net"
- "net/url"
- "os"
- "time"
- "github.com/alecthomas/units"
- )
- type Settings interface {
- SetValue(value Value)
- }
- type parserMixin struct {
- value Value
- required bool
- }
- func (p *parserMixin) SetValue(value Value) {
- p.value = value
- }
- // StringMap provides key=value parsing into a map.
- func (p *parserMixin) StringMap() (target *map[string]string) {
- target = &(map[string]string{})
- p.StringMapVar(target)
- return
- }
- // Duration sets the parser to a time.Duration parser.
- func (p *parserMixin) Duration() (target *time.Duration) {
- target = new(time.Duration)
- p.DurationVar(target)
- return
- }
- // Bytes parses numeric byte units. eg. 1.5KB
- func (p *parserMixin) Bytes() (target *units.Base2Bytes) {
- target = new(units.Base2Bytes)
- p.BytesVar(target)
- return
- }
- // IP sets the parser to a net.IP parser.
- func (p *parserMixin) IP() (target *net.IP) {
- target = new(net.IP)
- p.IPVar(target)
- return
- }
- // TCP (host:port) address.
- func (p *parserMixin) TCP() (target **net.TCPAddr) {
- target = new(*net.TCPAddr)
- p.TCPVar(target)
- return
- }
- // TCPVar (host:port) address.
- func (p *parserMixin) TCPVar(target **net.TCPAddr) {
- p.SetValue(newTCPAddrValue(target))
- }
- // ExistingFile sets the parser to one that requires and returns an existing file.
- func (p *parserMixin) ExistingFile() (target *string) {
- target = new(string)
- p.ExistingFileVar(target)
- return
- }
- // ExistingDir sets the parser to one that requires and returns an existing directory.
- func (p *parserMixin) ExistingDir() (target *string) {
- target = new(string)
- p.ExistingDirVar(target)
- return
- }
- // ExistingFileOrDir sets the parser to one that requires and returns an existing file OR directory.
- func (p *parserMixin) ExistingFileOrDir() (target *string) {
- target = new(string)
- p.ExistingFileOrDirVar(target)
- return
- }
- // File returns an os.File against an existing file.
- func (p *parserMixin) File() (target **os.File) {
- target = new(*os.File)
- p.FileVar(target)
- return
- }
- // File attempts to open a File with os.OpenFile(flag, perm).
- func (p *parserMixin) OpenFile(flag int, perm os.FileMode) (target **os.File) {
- target = new(*os.File)
- p.OpenFileVar(target, flag, perm)
- return
- }
- // URL provides a valid, parsed url.URL.
- func (p *parserMixin) URL() (target **url.URL) {
- target = new(*url.URL)
- p.URLVar(target)
- return
- }
- // StringMap provides key=value parsing into a map.
- func (p *parserMixin) StringMapVar(target *map[string]string) {
- p.SetValue(newStringMapValue(target))
- }
- // Float sets the parser to a float64 parser.
- func (p *parserMixin) Float() (target *float64) {
- return p.Float64()
- }
- // Float sets the parser to a float64 parser.
- func (p *parserMixin) FloatVar(target *float64) {
- p.Float64Var(target)
- }
- // Duration sets the parser to a time.Duration parser.
- func (p *parserMixin) DurationVar(target *time.Duration) {
- p.SetValue(newDurationValue(target))
- }
- // BytesVar parses numeric byte units. eg. 1.5KB
- func (p *parserMixin) BytesVar(target *units.Base2Bytes) {
- p.SetValue(newBytesValue(target))
- }
- // IP sets the parser to a net.IP parser.
- func (p *parserMixin) IPVar(target *net.IP) {
- p.SetValue(newIPValue(target))
- }
- // ExistingFile sets the parser to one that requires and returns an existing file.
- func (p *parserMixin) ExistingFileVar(target *string) {
- p.SetValue(newExistingFileValue(target))
- }
- // ExistingDir sets the parser to one that requires and returns an existing directory.
- func (p *parserMixin) ExistingDirVar(target *string) {
- p.SetValue(newExistingDirValue(target))
- }
- // ExistingDir sets the parser to one that requires and returns an existing directory.
- func (p *parserMixin) ExistingFileOrDirVar(target *string) {
- p.SetValue(newExistingFileOrDirValue(target))
- }
- // FileVar opens an existing file.
- func (p *parserMixin) FileVar(target **os.File) {
- p.SetValue(newFileValue(target, os.O_RDONLY, 0))
- }
- // OpenFileVar calls os.OpenFile(flag, perm)
- func (p *parserMixin) OpenFileVar(target **os.File, flag int, perm os.FileMode) {
- p.SetValue(newFileValue(target, flag, perm))
- }
- // URL provides a valid, parsed url.URL.
- func (p *parserMixin) URLVar(target **url.URL) {
- p.SetValue(newURLValue(target))
- }
- // URLList provides a parsed list of url.URL values.
- func (p *parserMixin) URLList() (target *[]*url.URL) {
- target = new([]*url.URL)
- p.URLListVar(target)
- return
- }
- // URLListVar provides a parsed list of url.URL values.
- func (p *parserMixin) URLListVar(target *[]*url.URL) {
- p.SetValue(newURLListValue(target))
- }
- // Enum allows a value from a set of options.
- func (p *parserMixin) Enum(options ...string) (target *string) {
- target = new(string)
- p.EnumVar(target, options...)
- return
- }
- // EnumVar allows a value from a set of options.
- func (p *parserMixin) EnumVar(target *string, options ...string) {
- p.SetValue(newEnumFlag(target, options...))
- }
- // Enums allows a set of values from a set of options.
- func (p *parserMixin) Enums(options ...string) (target *[]string) {
- target = new([]string)
- p.EnumsVar(target, options...)
- return
- }
- // EnumVar allows a value from a set of options.
- func (p *parserMixin) EnumsVar(target *[]string, options ...string) {
- p.SetValue(newEnumsFlag(target, options...))
- }
- // A Counter increments a number each time it is encountered.
- func (p *parserMixin) Counter() (target *int) {
- target = new(int)
- p.CounterVar(target)
- return
- }
- func (p *parserMixin) CounterVar(target *int) {
- p.SetValue(newCounterValue(target))
- }
|