package flag import ( "fmt" "forge.cadoles.com/Cadoles/emissary/internal/format" "forge.cadoles.com/Cadoles/emissary/internal/format/table" "github.com/urfave/cli/v2" ) func ComposeFlags(flags ...cli.Flag) []cli.Flag { baseFlags := []cli.Flag{ &cli.StringFlag{ Name: "server", Aliases: []string{"s"}, Usage: "use `SERVER` as server url", Value: "http://127.0.0.1:3000", }, &cli.StringFlag{ Name: "format", Aliases: []string{"f"}, Usage: fmt.Sprintf("use `FORMAT` as output format (available: %s)", format.Available()), Value: string(table.Format), }, &cli.StringFlag{ Name: "output-mode", Aliases: []string{"m"}, Usage: fmt.Sprintf("use `MODE` as output mode (available: %s)", []format.OutputMode{format.OutputModeCompact, format.OutputModeWide}), Value: string(format.OutputModeCompact), }, } flags = append(flags, baseFlags...) return flags } type BaseFlags struct { ServerURL string Format format.Format OutputMode format.OutputMode } func GetBaseFlags(ctx *cli.Context) *BaseFlags { serverURL := ctx.String("server") rawFormat := ctx.String("format") rawOutputMode := ctx.String("output-mode") return &BaseFlags{ ServerURL: serverURL, Format: format.Format(rawFormat), OutputMode: format.OutputMode(rawOutputMode), } }