package config import ( "encoding/json" "fmt" "os" "strings" ) type Config struct { DBPath string `json:"db_path"` RedisHost string `json:"redis_host"` RedisPassword string `json:"redis_password"` } var conf *Config var conf_path string = ".env" func GetConfig() *Config { if conf != nil { return conf } conf = &Config{} // TODO: Make this into a ini or toml file configContent, err := os.ReadFile(conf_path) if err != nil { fmt.Println("Error reading .env file: ", err) os.Exit(1) } envVariables := strings.Split(string(configContent), "\n") envMap := make(map[string]string) // TODO: Better error checking for blank variables for _, variable := range envVariables { if strings.Contains(variable, "=") { splitVariable := strings.Split(variable, "=") envMap[splitVariable[0]] = splitVariable[1] } } if err := json.Unmarshal([]byte(configContent), conf); err != nil { fmt.Println("Error unmarshalling config file: ", err) os.Exit(1) } // TODO: Better mapping of key to json values // TODO: Better error checking if values are missing // TODO: Default values for key, value := range envMap { if strings.Contains(key, "db_path") { conf.DBPath = value } else if strings.Contains(key, "redis_host") { conf.RedisHost = value } else if strings.Contains(key, "redis_password") { conf.RedisPassword = value } else { fmt.Println("Error, Unknown key value pair: ", key, " = ", value) } } return conf } func SetConfig(init_conf *Config) { conf = init_conf }