tagflag: github.com/anacrolix/tagflag Index | Files

package tagflag

import "github.com/anacrolix/tagflag"

Package tagflag uses reflection to derive flags and positional arguments to a program, and parses and sets them from a slice of arguments.

For example:

var opts struct {
    Mmap           bool           `help:"memory-map torrent data"`
    TestPeer       []*net.TCPAddr `help:"addresses of some starting peers"`
    tagflag.StartPos              // Marks beginning of positional arguments.
    Torrent        []string       `arity:"+" help:"torrent file path or magnet uri"`
}
tagflag.Parse(&opts)

Supported tags include:

help: a line of text to show after the option
arity: defaults to 1. the number of arguments a field requires, or ? for one
       optional argument, + for one or more, or * for zero or more.

MarshalArgs is called on fields that implement ArgsMarshaler. A number of arguments matching the arity of the field are passed if possible.

Slices will collect successive values, within the provided arity constraints.

A few helpful types have builtin marshallers, for example Bytes, *net.TCPAddr, *url.URL, time.Duration, and net.IP.

Flags are strictly passed with the form -K or -K=V. No space between -K and the value is allowed. This allows positional arguments to be mixed in with flags, and prevents any confusion due to some flags occasionally not taking values. A `--` will terminate flag parsing, and treat all further arguments as positional.

A builtin help and usage printer are provided, and activated when passing -h or -help.

Flag and positional argument names are automatically munged to fit the standard scheme within tagflag.

Index

Package Files

arg.go arity.go builtin.go bytes.go doc.go errors.go excess.go marshalers.go misc.go parseopt.go parser.go tagflag.go usage.go

Variables

var ErrDefaultHelp = errors.New("help flag")

Default help flag was provided, and should be handled.

var ErrFieldsAfterExcessArgs = fmt.Errorf("field(s) after %T", ExcessArgs{})

func Description Uses

func Description(desc string) parseOpt

Provides a description for the program to be shown in the usage message.

func NoDefaultHelp Uses

func NoDefaultHelp() parseOpt

Don't perform default behaviour if -h or -help are passed.

func Parse Uses

func Parse(cmd interface{}, opts ...parseOpt)

Parses the command-line arguments, exiting the process appropriately on errors or if usage is printed.

func ParseArgs Uses

func ParseArgs(cmd interface{}, args []string, opts ...parseOpt)

func ParseErr Uses

func ParseErr(cmd interface{}, args []string, opts ...parseOpt) (err error)

Parses given arguments, returning any error.

func Program Uses

func Program(name string) parseOpt

func Unmarshal Uses

func Unmarshal(arg string, v interface{}) error

type Bytes Uses

type Bytes int64

A nice builtin type that will marshal human readable byte quantities to int64. For example 100GB. See https://godoc.org/github.com/dustin/go-humanize.

func (Bytes) Int64 Uses

func (me Bytes) Int64() int64

func (*Bytes) Marshal Uses

func (me *Bytes) Marshal(s string) (err error)

func (*Bytes) RequiresExplicitValue Uses

func (*Bytes) RequiresExplicitValue() bool

func (Bytes) String Uses

func (me Bytes) String() string

type ExcessArgs Uses

type ExcessArgs []string

type Marshaler Uses

type Marshaler interface {
    Marshal(in string) error
    // Must have and ignore a pointer receiver.
    RequiresExplicitValue() bool
}

type StartPos Uses

type StartPos struct{}

Struct fields after this one are considered positional arguments.

Package tagflag imports 19 packages (graph) and is imported by 19 packages. Updated 2019-03-26. Refresh now. Tools for package owners.