From c9047cfbc62191ccbe47c2ca0896eb4b192a7223 Mon Sep 17 00:00:00 2001 From: Mitchell Riedstra Date: Sun, 27 Apr 2025 10:22:11 -0400 Subject: Initial --- main.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 main.go (limited to 'main.go') diff --git a/main.go b/main.go new file mode 100644 index 0000000..8c50dc3 --- /dev/null +++ b/main.go @@ -0,0 +1,61 @@ +// Package envflag is an extremely small bit of code to make configuration +// via environment variables a little bit less of a hassle when using +// the flag package in the standard library. +package envflag + +import ( + "flag" + "fmt" + "os" + "strconv" +) + +// String is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func String(fl *flag.FlagSet, p *string, name, envvar, usage string) { + if v := os.Getenv(envvar); v != "" { + *p = v + } + + fl.StringVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) +} + +// Bool is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func Bool(fl *flag.FlagSet, p *bool, name, envvar, usage string) error { + if v := os.Getenv(envvar); v != "" { + res, err := strconv.ParseBool(v) + + if err != nil { + return fmt.Errorf("Bool: cannot parse '%s=%s', %w", + envvar, v, err) + } + + *p = res + } + + fl.BoolVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) + + return nil +} + +// Int is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func Int(fl *flag.FlagSet, p *int, name, envvar, usage string) error { + if v := os.Getenv(envvar); v != "" { + res, err := strconv.ParseInt(v, 10, 32) + if err != nil { + return fmt.Errorf("Int: cannot parse '%s=%s', %w", + envvar, v, err) + } + + *p = int(res) + } + + fl.IntVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) + + return nil +} -- cgit v1.2.3