From ffb4f2dd193f631ac85c4c650163491b41eefefd Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 20 Jun 2023 01:52:16 +0300 Subject: refactor config agian --- internal/config/config.go | 60 +++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index 12f1adc..ff8d452 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -22,22 +22,40 @@ type Config struct { } func New(arg any) (Config, error) { - var conf *Config - switch arg := arg.(type) { case string: - // Used to read a config from a file. - conf = &Config{} - if err := conf.readConfigFile(arg); err != nil { - return *conf, err - } + return newFromConfigFile(arg) case Config: // Used to initialize a custom config from unit tests. - conf = &arg + return arg.initialize() default: - log.Fatal("unable to initialize config") + panic("unable to initialize config") + } +} + +func newFromConfigFile(configFile string) (Config, error) { + var conf Config + + file, err := os.Open(configFile) + if err != nil { + return conf, err + } + defer file.Close() + + bytes, err := io.ReadAll(file) + if err != nil { + return conf, err + } + + err = json.Unmarshal(bytes, &conf) + if err != nil { + return conf, err } + return conf.initialize() +} + +func (conf Config) initialize() (Config, error) { if conf.LoopIntervalS == 0 { conf.LoopIntervalS = 10 } @@ -45,7 +63,7 @@ func New(arg any) (Config, error) { if conf.MyID == "" { hostname, err := os.Hostname() if err != nil { - return *conf, err + return conf, err } conf.MyID = hostname } @@ -55,27 +73,7 @@ func New(arg any) (Config, error) { conf.nodeNumberCache[utils.StripPort(node)] = i } - return *conf, nil -} - -func (conf *Config) readConfigFile(configFile string) error { - file, err := os.Open(configFile) - if err != nil { - return err - } - defer file.Close() - - bytes, err := io.ReadAll(file) - if err != nil { - return err - } - - err = json.Unmarshal(bytes, conf) - if err != nil { - return nil - } - - return nil + return conf, nil } func (conf Config) NodeNumber(node string) int { -- cgit v1.2.3