mirror of
https://github.com/ncarlier/webhookd.git
synced 2025-04-07 21:47:09 +00:00
70 lines
1.8 KiB
Go
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
|
|
}
|