summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2023-06-20 01:52:16 +0300
committerPaul Buetow <paul@buetow.org>2023-06-20 01:52:16 +0300
commitffb4f2dd193f631ac85c4c650163491b41eefefd (patch)
tree0824cc9e2d06e20170bd21289df6be8ab73ce09c
parentb5126ef9aace14f53717442798bca79a8b6cd75b (diff)
refactor config agian
-rw-r--r--internal/config/config.go60
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 {