mirror of
https://github.com/taigrr/jety.git
synced 2026-04-02 03:19:03 -07:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
64d37d936f
|
|||
|
62dd32f61b
|
|||
|
9c5923bd4e
|
|||
|
5643d4d262
|
|||
|
ee74c94359
|
|||
|
e84645ccfa
|
@@ -1,6 +1,6 @@
|
||||
# JETY
|
||||
|
||||
JSON, ENV, YAML, TOML
|
||||
JSON, ENV, TOML, YAML
|
||||
|
||||
This is a package for collapsing multiple configuration stores (env+json, env+yaml, env+toml) and writing them back to a centralized config.
|
||||
|
||||
|
||||
38
getters.go
38
getters.go
@@ -143,8 +143,17 @@ func (c *ConfigManager) GetStringSlice(key string) []string {
|
||||
}
|
||||
}
|
||||
switch val := v.Value.(type) {
|
||||
case []string:
|
||||
return val
|
||||
case []any:
|
||||
var ret []string
|
||||
for _, v := range val {
|
||||
switch v := v.(type) {
|
||||
case string:
|
||||
ret = append(ret, v)
|
||||
default:
|
||||
ret = append(ret, fmt.Sprintf("%v", v))
|
||||
}
|
||||
}
|
||||
return ret
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
@@ -191,8 +200,29 @@ func (c *ConfigManager) GetIntSlice(key string) []int {
|
||||
}
|
||||
}
|
||||
switch val := v.Value.(type) {
|
||||
case []int:
|
||||
return val
|
||||
case []any:
|
||||
var ret []int
|
||||
for _, v := range val {
|
||||
switch v := v.(type) {
|
||||
case int:
|
||||
ret = append(ret, v)
|
||||
case string:
|
||||
i, err := strconv.Atoi(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
ret = append(ret, i)
|
||||
case float32:
|
||||
ret = append(ret, int(v))
|
||||
case float64:
|
||||
ret = append(ret, int(v))
|
||||
case nil:
|
||||
continue
|
||||
default:
|
||||
continue
|
||||
}
|
||||
}
|
||||
return ret
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
16
jety.go
16
jety.go
@@ -41,7 +41,10 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
var ErrConfigFileNotFound = errors.New("config File Not Found")
|
||||
var (
|
||||
ErrConfigFileNotFound = errors.New("config file not found")
|
||||
ErrConfigFileEmpty = errors.New("config file is empty")
|
||||
)
|
||||
|
||||
func NewConfigManager() *ConfigManager {
|
||||
cm := ConfigManager{}
|
||||
@@ -162,8 +165,6 @@ func (c *ConfigManager) SetEnvPrefix(prefix string) {
|
||||
}
|
||||
|
||||
func (c *ConfigManager) ReadInConfig() error {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
// assume config = map[string]any
|
||||
confFileData, err := readFile(c.configFileUsed, c.configType)
|
||||
if err != nil {
|
||||
@@ -174,12 +175,21 @@ func (c *ConfigManager) ReadInConfig() error {
|
||||
lower := strings.ToLower(k)
|
||||
conf[lower] = ConfigMap{Key: k, Value: v}
|
||||
}
|
||||
c.mutex.Lock()
|
||||
c.mapConfig = conf
|
||||
c.mutex.Unlock()
|
||||
c.collapse()
|
||||
return nil
|
||||
}
|
||||
|
||||
func readFile(filename string, fileType configType) (map[string]any, error) {
|
||||
fileData := make(map[string]any)
|
||||
if d, err := os.Stat(filename); os.IsNotExist(err) {
|
||||
return nil, ErrConfigFileNotFound
|
||||
} else if d.Size() == 0 {
|
||||
return nil, ErrConfigFileEmpty
|
||||
}
|
||||
|
||||
switch fileType {
|
||||
case ConfigTypeTOML:
|
||||
_, err := toml.DecodeFile(filename, &fileData)
|
||||
|
||||
@@ -40,5 +40,7 @@ func (c *ConfigManager) SetDefault(key string, value any) {
|
||||
} else {
|
||||
c.combinedConfig[lower] = ConfigMap{Key: key, Value: value}
|
||||
}
|
||||
} else {
|
||||
c.combinedConfig[lower] = c.mapConfig[lower]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user