105 lines
2.2 KiB
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
|
|
}
|
|
}
|