// This package provides --quiet and --verbose flags for cli and corresponding output print functions PrintOut and PrintVerbose. // Another line package ui import ( "fmt" "io" "os" "github.com/spf13/pflag" ) var stdOutput io.Writer var verboseOutput io.Writer func init() { outputFlagSet := pflag.NewFlagSet("output", pflag.ContinueOnError) outputFlagSet.ParseErrorsWhitelist.UnknownFlags = true outputFlagSet.SetOutput(nil) isVerbose := outputFlagSet.BoolP("verbose", "V", false, "If set adds additional details to output.") isQuiet := outputFlagSet.BoolP("quiet", "q", false, "If set makes no output at all.") err := outputFlagSet.Parse(os.Args) if err != nil { fmt.Println(err) os.Exit(1) } SetupOutputMode(*isQuiet, *isVerbose) } func SetupOutputMode(isQuiet bool, isVerbose bool) { if isQuiet { stdOutput = io.Discard verboseOutput = io.Discard return } if isVerbose { stdOutput = os.Stdout verboseOutput = os.Stdout return } stdOutput = os.Stdout verboseOutput = io.Discard } func PrintOut(a ...any) (n int, err error) { n, err = fmt.Fprintln(stdOutput, a...) return } func PrintVerbose(a ...any) (n int, err error) { n, err = fmt.Fprintln(verboseOutput, a...) return }