89 lines
1.5 KiB
Go
89 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gopkg.in/ini.v1"
|
|
)
|
|
|
|
type DataSourceConfig struct {
|
|
Port int
|
|
DBPath string
|
|
}
|
|
|
|
type RedisConfig struct {
|
|
Host string
|
|
Port int
|
|
Password string
|
|
}
|
|
|
|
func loadRequiredInt(sec *ini.Section, key string) (int, error) {
|
|
val, err := sec.GetKey(key)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
res, err := val.Int()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func loadRequiredString(sec *ini.Section, key string) (string, error) {
|
|
val, err := sec.GetKey(key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
res := strings.TrimSpace(val.String())
|
|
if res == "" {
|
|
return "", fmt.Errorf("%s cannot be empty", key)
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func LoadDataSourceConfig(cfg *ini.File) (*DataSourceConfig, error) {
|
|
sec, err := cfg.GetSection("data_source")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
port, err := loadRequiredInt(sec, "port")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dbPath, err := loadRequiredString(sec, "db_path")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &DataSourceConfig{
|
|
Port: port,
|
|
DBPath: dbPath,
|
|
}, nil
|
|
}
|
|
|
|
func LoadRedisConfig(cfg *ini.File) (*RedisConfig, error) {
|
|
sec, err := cfg.GetSection("redis")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
host, err := loadRequiredString(sec, "host")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
port, err := loadRequiredInt(sec, "port")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &RedisConfig{
|
|
Host: host,
|
|
Port: port,
|
|
Password: strings.TrimSpace(sec.Key("password").String()),
|
|
}, nil
|
|
}
|