executor.go
1 package usage 2 3 import ( 4 "flag" 5 "slices" 6 "strings" 7 8 "codeflow.dananglin.me.uk/apollo/enbas/internal/info" 9 ) 10 11 // ExecutorUsageFunc returns the function used to print a command's help page. 12 func ExecutorUsageFunc(name, summary string, flagset *flag.FlagSet) func() { 13 return func() { 14 var builder strings.Builder 15 16 builder.WriteString("SUMMARY:") 17 builder.WriteString("\n " + name + " - " + summary) 18 builder.WriteString("\n\nUSAGE:") 19 builder.WriteString("\n " + info.ApplicationName + " " + name) 20 21 flagMap := make(map[string]string) 22 23 flagset.VisitAll(func(f *flag.Flag) { 24 flagMap[f.Name] = f.Usage 25 }) 26 27 if len(flagMap) > 0 { 28 flags := make([]string, len(flagMap)) 29 ind := 0 30 31 for f := range flagMap { 32 flags[ind] = f 33 ind++ 34 } 35 36 slices.Sort(flags) 37 38 builder.WriteString(" [flags]") 39 builder.WriteString("\n\nFLAGS:") 40 41 for _, value := range flags { 42 builder.WriteString("\n --" + value) 43 builder.WriteString("\n " + flagMap[value]) 44 } 45 } 46 47 builder.WriteString("\n") 48 49 w := flag.CommandLine.Output() 50 51 _, _ = w.Write([]byte(builder.String())) 52 } 53 }