Cosmos-Server/src/config.go
2023-04-07 15:04:42 +01:00

53 lines
1.3 KiB
Go

package main
import (
"os"
"regexp"
"encoding/json"
"github.com/azukaar/cosmos-server/src/utils"
)
func LoadConfig() utils.Config {
configFile := utils.GetConfigFileName()
utils.Log("Using config file: " + configFile)
if utils.CreateDefaultConfigFileIfNecessary() {
utils.LoadBaseMainConfig(utils.DefaultConfig)
return utils.DefaultConfig
}
file, err := os.Open(configFile)
if err != nil {
utils.Fatal("Opening Config File: ", err)
}
defer file.Close()
decoder := json.NewDecoder(file)
config := utils.Config{}
err = decoder.Decode(&config)
// check file is not empty
if err != nil {
// check error is not empty
if err.Error() == "EOF" {
utils.Fatal("Reading Config File: File is empty.", err)
}
// get error string
errString := err.Error()
// replace string in error
m1 := regexp.MustCompile(`json: cannot unmarshal ([A-Za-z\.]+) into Go struct field ([A-Za-z\.]+) of type ([A-Za-z\.]+)`)
errString = m1.ReplaceAllString(errString, "Invalid JSON in config file.\n > Field $2 is wrong.\n > Type is $1 Should be $3")
utils.Fatal("Reading Config File: " + errString, err)
}
// check if config is valid
utils.Log("Validating config file...")
err = utils.Validate.Struct(config)
if err != nil {
utils.Fatal("Reading Config File: " + err.Error(), err)
}
utils.LoadBaseMainConfig(config)
return config
}