webhookd/pkg/config/helper.go
2020-01-28 20:00:42 +00:00

70 lines
1.8 KiB
Go

package config
import (
"flag"
"fmt"
"os"
"strconv"
"strings"
"time"
"github.com/ncarlier/webhookd/pkg/strcase"
)
const envPrefix = "WHD"
// setFlagEnvString set string value from flag or env with fallback
func setFlagEnvString(p *string, key, desc, fallback string) {
if val := envValue(key); val != nil {
fallback = *val
}
flag.StringVar(p, key, fallback, envDesc(key, desc))
}
// setFlagEnvBool set bool value from flag or env with fallback
func setFlagEnvBool(p *bool, key, desc string, fallback bool) {
if val := envValue(key); val != nil {
fallback, _ = strconv.ParseBool(*val)
}
flag.BoolVar(p, key, fallback, envDesc(key, desc))
}
// setFlagEnvInt set int value from flag or env with fallback
func setFlagEnvInt(p *int, key, desc string, fallback int) {
if val := envValue(key); val != nil {
fallback, _ = strconv.Atoi(*val)
}
flag.IntVar(p, key, fallback, envDesc(key, desc))
}
// setFlagEnvDuration set duration value form flag or env with fallback
func setFlagEnvDuration(p *time.Duration, key, desc string, fallback time.Duration) {
if val := envValue(key); val != nil {
fallback, _ = time.ParseDuration(*val)
}
flag.DurationVar(p, key, fallback, envDesc(key, desc))
}
// setFlagString set string value from flag with fallback
func setFlagString(p *string, key, desc, fallback string) {
flag.StringVar(p, key, fallback, desc)
}
// setFlagBool set bool value from flag with fallback
func setFlagBool(p *bool, key, desc string, fallback bool) {
flag.BoolVar(p, key, fallback, desc)
}
func envDesc(key, desc string) string {
envKey := strings.ToUpper(strcase.ToSnake(key))
return fmt.Sprintf("%s (env: %s_%s)", desc, envPrefix, envKey)
}
func envValue(key string) *string {
envKey := strings.ToUpper(strcase.ToSnake(key))
if value, ok := os.LookupEnv(envPrefix + "_" + envKey); ok {
return &value
}
return nil
}