diff options
Diffstat (limited to 'parse.go')
| -rw-r--r-- | parse.go | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -67,9 +67,10 @@ type Config struct { // Parser represents a set of command line options with destination values type Parser struct { - spec []*spec - config Config - version string + spec []*spec + config Config + version string + description string } // Versioned is the interface that the destination struct should implement to @@ -80,6 +81,14 @@ type Versioned interface { Version() string } +// Described is the interface that the destination struct should implement to +// make a description string appear at the top of the help message. +type Described interface { + // Description returns the string that will be printed on a line by itself + // at the top of the help message. + Description() string +} + // walkFields calls a function for each field of a struct, recursively expanding struct fields. func walkFields(v reflect.Value, visit func(field reflect.StructField, val reflect.Value, owner reflect.Type) bool) { t := v.Type() @@ -102,6 +111,9 @@ func NewParser(config Config, dests ...interface{}) (*Parser, error) { if dest, ok := dest.(Versioned); ok { p.version = dest.Version() } + if dest, ok := dest.(Described); ok { + p.description = dest.Description() + } v := reflect.ValueOf(dest) if v.Kind() != reflect.Ptr { panic(fmt.Sprintf("%s is not a pointer (did you forget an ampersand?)", v.Type())) |
