// Package config provides build-tag-switched application configuration. // The global Config singleton is initialized at import time via init() // and can be overridden in tests with LoadForTest(). package config import ( "os" "sync" "github.com/joho/godotenv" "github.com/rs/zerolog" ) type Environment string const ( Dev Environment = "dev" Prod Environment = "prod" ) type Config struct { Environment Environment Host string Port string LogLevel zerolog.Level AppURL string DBPath string } var ( Global *Config once sync.Once ) func init() { once.Do(func() { Global = Load() }) } func getEnv(key, fallback string) string { if val, ok := os.LookupEnv(key); ok { return val } return fallback } func loadBase() *Config { godotenv.Load() //nolint:errcheck // .env file is optional return &Config{ Host: getEnv("HOST", "0.0.0.0"), Port: getEnv("PORT", "7331"), LogLevel: func() zerolog.Level { switch os.Getenv("LOG_LEVEL") { case "TRACE": return zerolog.TraceLevel case "DEBUG": return zerolog.DebugLevel case "INFO": return zerolog.InfoLevel case "WARN": return zerolog.WarnLevel case "ERROR": return zerolog.ErrorLevel default: return zerolog.InfoLevel } }(), AppURL: getEnv("APP_URL", "https://games.adriatica.io"), DBPath: getEnv("DB_PATH", "data/c4.db"), } }