48 lines
922 B
Go
48 lines
922 B
Go
|
package cmdlets
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Usage struct {
|
||
|
Name string
|
||
|
Short string
|
||
|
Long []string
|
||
|
Flags map[string]string
|
||
|
Examples []string
|
||
|
}
|
||
|
|
||
|
func (u Usage) String() string {
|
||
|
str := strings.Builder{}
|
||
|
str.WriteString(
|
||
|
fmt.Sprintf("%s SUBCOMMAND\n\n", strings.ToUpper(u.Name)),
|
||
|
)
|
||
|
str.WriteString(fmt.Sprintf("\t%s\t%s\n\n", u.Name, u.Short))
|
||
|
for _, line := range u.Long {
|
||
|
str.WriteString(fmt.Sprintf("\t%s\n", line))
|
||
|
}
|
||
|
str.WriteRune('\n')
|
||
|
if len(u.Flags) != 0 {
|
||
|
for flag, desc := range u.Flags {
|
||
|
str.WriteString(fmt.Sprintf("\t%s\n\t\t%s\n", flag, desc))
|
||
|
}
|
||
|
str.WriteRune('\n')
|
||
|
}
|
||
|
if len(u.Examples) != 0 {
|
||
|
str.WriteString("EXAMPLES\n\n")
|
||
|
for _, example := range u.Examples {
|
||
|
str.WriteString(fmt.Sprintf("\t%s\n", example))
|
||
|
}
|
||
|
str.WriteRune('\n')
|
||
|
}
|
||
|
|
||
|
return str.String()
|
||
|
}
|
||
|
|
||
|
type Commandlet interface {
|
||
|
Name() string
|
||
|
Usage() Usage
|
||
|
Invoke(args ...string) error
|
||
|
}
|