75 lines
1.4 KiB
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))
|
|
}
|
|
}
|