diff options
| author | Paul Buetow <paul@buetow.org> | 2023-06-20 01:52:16 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2023-06-20 01:52:16 +0300 |
| commit | ffb4f2dd193f631ac85c4c650163491b41eefefd (patch) | |
| tree | 0824cc9e2d06e20170bd21289df6be8ab73ce09c | |
| parent | b5126ef9aace14f53717442798bca79a8b6cd75b (diff) | |
refactor config agian
| -rw-r--r-- | internal/config/config.go | 60 |
1 files 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 { |
