aboutsummaryrefslogtreecommitdiff
path: root/envflag
diff options
context:
space:
mode:
Diffstat (limited to 'envflag')
-rw-r--r--envflag/main.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/envflag/main.go b/envflag/main.go
new file mode 100644
index 0000000..09c1f97
--- /dev/null
+++ b/envflag/main.go
@@ -0,0 +1,58 @@
+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
+}