From 1d01acca36b78eeba99da1adb10e72d186433b39 Mon Sep 17 00:00:00 2001 From: Mitchell Riedstra Date: Fri, 6 Jan 2023 00:04:28 -0500 Subject: Update site to server configuration via environment variables. Add a genhash command. Update docs. --- envflag/main.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 envflag/main.go (limited to 'envflag') 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 +} -- cgit v1.2.3