flags : Help string using reflection iteration over fields

This commit is contained in:
bth 2026-01-18 14:48:58 -08:00
commit 0422b4a146
3 changed files with 43 additions and 13 deletions

View file

@ -2,6 +2,7 @@ package flags
import (
"fmt"
"reflect"
"strings"
)
@ -34,3 +35,23 @@ func MissingValueArg(args []string, i int) bool {
func HelpMissingVal(flag string) {
fmt.Printf("%s needs a value assignment\n", flag)
}
// print out help string by reflecting over fields of provided opts struct
func Help(subcmd string, opts any) {
v := reflect.ValueOf(opts)
t := v.Type()
fmt.Printf("um %s usage:\n", subcmd)
for i := 0; i < v.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
switch value.Interface().(type) {
case Arg:
fmt.Printf("%-12v string\t: %v\n", "["+strings.ToLower(field.Name)+"]", value.FieldByName("Help"))
case Flag[string]:
fmt.Printf("%-12v | %v string\t: %v\n", value.FieldByName("Long"), value.FieldByName("Short"), value.FieldByName("Help"))
case Flag[bool]:
fmt.Printf("%-12v | %v bool\t: %v\n", value.FieldByName("Long"), value.FieldByName("Short"), value.FieldByName("Help"))
}
}
}