Initial commit
This commit is contained in:
90
pkg/config/config.go
Normal file
90
pkg/config/config.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var config map[string]interface{}
|
||||
|
||||
func Load(path string) error {
|
||||
err := loadConfigFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
env := os.Getenv("addrss_ENVIRONMENT")
|
||||
if env != "" {
|
||||
path = strings.ReplaceAll(path, ".json", "."+env+".json")
|
||||
err = loadConfigFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetString(key string) (string, error) {
|
||||
v, err := Get(key)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return v.(string), nil
|
||||
}
|
||||
|
||||
func GetInt64(key string) (int64, error) {
|
||||
v, err := Get(key)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return int64(v.(float64)), nil
|
||||
}
|
||||
|
||||
func GetBool(key string) (bool, error) {
|
||||
v, err := Get(key)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return v.(bool), nil
|
||||
}
|
||||
|
||||
func Get(key string) (interface{}, error) {
|
||||
value, ok := config[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("configuration value not found for key %s", key)
|
||||
}
|
||||
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
if strings.Contains(v, "{{") && strings.Contains(v, "}}") {
|
||||
_, a, _ := strings.Cut(v, "{{")
|
||||
envVar, _, _ := strings.Cut(a, "}}")
|
||||
|
||||
value = strings.ReplaceAll(v, "{{"+envVar+"}}", os.Getenv(envVar))
|
||||
}
|
||||
return value, nil
|
||||
|
||||
default:
|
||||
return value, nil
|
||||
}
|
||||
}
|
||||
|
||||
func loadConfigFile(path string) error {
|
||||
contents, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(contents, &config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user