Browse Source

IConfig

- add ReadConfig
Alexey Kim 1 year ago
parent
commit
9be9436ae3
3 changed files with 30 additions and 0 deletions
  1. 24 0
      config/config.go
  2. 2 0
      go.mod
  3. 4 0
      go.sum

+ 24 - 0
config/config.go

@@ -2,6 +2,8 @@ package config
 
 import (
 	"fmt"
+	"gopkg.in/yaml.v3"
+	"os"
 	"reflect"
 )
 
@@ -37,3 +39,25 @@ func Invalidate(config IConfig) error {
 
 	return nil
 }
+
+func ReadConfig[T IConfig](path string) (*T, error) {
+	var (
+		cfg = new(T)
+		fd  []byte
+		err error
+	)
+
+	if fd, err = os.ReadFile(path); err != nil {
+		return nil, err
+	}
+
+	if err = yaml.Unmarshal(fd, cfg); err != nil {
+		return nil, err
+	}
+
+	if err = Invalidate(*cfg); err != nil {
+		return nil, err
+	}
+
+	return cfg, nil
+}

+ 2 - 0
go.mod

@@ -1,3 +1,5 @@
 module beejay.kim/craft/api
 
 go 1.20
+
+require gopkg.in/yaml.v3 v3.0.1

+ 4 - 0
go.sum

@@ -0,0 +1,4 @@
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=