This commit is contained in:
79
common/config.go
Normal file
79
common/config.go
Normal file
@ -0,0 +1,79 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/pelletier/go-toml/v2"
|
||||
"github.com/rs/zerolog"
|
||||
l "github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
const (
|
||||
ConfigPath = "./config.toml"
|
||||
DefaultLogLevel = "info"
|
||||
DefaultPort = 8080
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Log log
|
||||
Http http
|
||||
}
|
||||
|
||||
type http struct {
|
||||
Port uint16
|
||||
}
|
||||
|
||||
type log struct {
|
||||
Level string
|
||||
}
|
||||
|
||||
func defaultConfig() Config {
|
||||
return Config{
|
||||
Log: log{
|
||||
Level: DefaultLogLevel,
|
||||
},
|
||||
Http: http{
|
||||
Port: DefaultPort,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func loadConfig(path string) Config {
|
||||
logger := l.Error().Str("path", path)
|
||||
config := defaultConfig()
|
||||
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
logger.Err(err).Msg("cannot open file, using default config")
|
||||
return config
|
||||
}
|
||||
|
||||
dec := toml.NewDecoder(file)
|
||||
err = dec.Decode(&config)
|
||||
if err != nil {
|
||||
logger.Err(err).Msg("cannot parse config, using default")
|
||||
return config
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
func NewConfig() Config {
|
||||
return loadConfig(ConfigPath)
|
||||
}
|
||||
|
||||
func (c *Config) LogLevel() zerolog.Level {
|
||||
switch strings.ToLower(c.Log.Level) {
|
||||
case "error":
|
||||
return zerolog.ErrorLevel
|
||||
case "debug":
|
||||
return zerolog.DebugLevel
|
||||
case "trace":
|
||||
return zerolog.TraceLevel
|
||||
case "warn":
|
||||
return zerolog.WarnLevel
|
||||
default:
|
||||
return zerolog.InfoLevel
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user