NaiveBotRouter/pkg/conf/conf.go

75 lines
1.4 KiB
Go

package conf
import (
"NaiveBotRouter/pkg/log"
"NaiveBotRouter/pkg/util"
"encoding/json"
"github.com/BurntSushi/toml"
"os"
)
type Config struct {
Common Common
Servers map[string]Server
}
type Common struct {
Name string
}
type Server struct {
Addr string
}
var (
GlobalConfig Config
BackendConfig Server
)
// 释放默认配置文件
func releaseConfig(file string, config Config) {
f, err := util.CreateNestedFile(file)
if err != nil {
log.Log.Fatalf("failed to create default config: %s", err.Error())
}
encoder := toml.NewEncoder(f)
err = encoder.Encode(config)
if err != nil {
log.Log.Fatalf("internal - encoding toml: %s", err.Error())
}
}
func InitConfig(file string) {
GlobalConfig = defaultConfig
if util.NotExists(file) {
// 默认配置文件不存在则创建
if file == "config.toml" {
releaseConfig(file, GlobalConfig)
log.Log.Infof("default config created")
} else {
log.Log.Fatalf("config file not exists: %s", file)
os.Exit(1)
}
}
// 解析配置文件
_, err := toml.DecodeFile(file, &GlobalConfig)
if err != nil {
log.Log.Fatalf("toml decoding error: %s", err.Error())
}
// 验证必须的字段
if v, ok := GlobalConfig.Servers["backend"]; ok {
BackendConfig = v
} else {
log.Log.Fatalf("mission required field: servers.backend")
}
jsonConfig, err := json.Marshal(GlobalConfig)
if err == nil {
log.Log.Debugf("config loaded: %s", string(jsonConfig))
}
}