aboutsummaryrefslogtreecommitdiff
path: root/envflag
diff options
context:
space:
mode:
authorMitchell Riedstra <mitch@riedstra.dev>2023-01-06 00:04:28 -0500
committerMitchell Riedstra <mitch@riedstra.dev>2023-01-06 00:04:28 -0500
commit1d01acca36b78eeba99da1adb10e72d186433b39 (patch)
treed44fd6268ee26af16acfe720abbd2b3a2e6e5574 /envflag
parentad769c34b2f03bffe2c84a8872331838a80c2870 (diff)
downloadgo-website-1d01acca36b78eeba99da1adb10e72d186433b39.tar.gz
go-website-1d01acca36b78eeba99da1adb10e72d186433b39.tar.xz
Update site to server configuration via environment variables. Add a genhash command. Update docs.
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
+}