ytdl-web/pkg/config/var.go

105 lines
2.2 KiB
Go

package config
import (
"flag"
"fmt"
"os"
"strconv"
"strings"
"time"
)
func getEnvKey(key string) string {
return fmt.Sprintf("YTDL_WEB_%s", strings.ReplaceAll(strings.ToUpper(key), ".", "_"))
}
func String(key string, defaultValue string, usage string) func() string {
flagValue := flag.String(key, defaultValue, usage)
return func() string {
if flagValue != nil && *flagValue != defaultValue {
return *flagValue
}
envValue, ok := os.LookupEnv(getEnvKey(key))
if ok {
return envValue
}
return defaultValue
}
}
func Int(key string, defaultValue int, usage string) func() int {
flagValue := flag.Int(key, defaultValue, usage)
return func() int {
if flagValue != nil && *flagValue != defaultValue {
return *flagValue
}
envValue, ok := os.LookupEnv(getEnvKey(key))
if ok {
value, err := strconv.Atoi(envValue)
if err == nil {
return value
}
}
return defaultValue
}
}
func Bool(key string, defaultValue bool, usage string) func() bool {
flagValue := flag.Bool(key, defaultValue, usage)
return func() bool {
if flagValue != nil && *flagValue != defaultValue {
return *flagValue
}
envValue, ok := os.LookupEnv(getEnvKey(key))
if ok {
value, err := strconv.ParseBool(envValue)
if err == nil {
return value
}
}
return defaultValue
}
}
func StringSlice(key string, defaultValue []string, usage string) func() []string {
defaultString := strings.Join(defaultValue, ",")
flagValue := flag.String(key, defaultString, usage)
return func() []string {
if flagValue != nil && *flagValue != defaultString {
return strings.Split(*flagValue, ",")
}
envValue, ok := os.LookupEnv(getEnvKey(key))
if ok {
return strings.Split(envValue, ",")
}
return defaultValue
}
}
func Duration(key string, defaultValue time.Duration, usage string) func() time.Duration {
flagValue := flag.Duration(key, defaultValue, usage)
return func() time.Duration {
if flagValue != nil && *flagValue != defaultValue {
return *flagValue
}
envValue, ok := os.LookupEnv(getEnvKey(key))
if ok {
value, err := time.ParseDuration(envValue)
if err == nil {
return value
}
}
return defaultValue
}
}