Files
addrss.io/pkg/config/config.go
2025-09-06 21:35:45 -04:00

91 lines
1.4 KiB
Go

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
}