mirror of
https://github.com/taigrr/jety.git
synced 2026-04-02 03:19:03 -07:00
add type coercions
This commit is contained in:
138
env.go
138
env.go
@@ -5,6 +5,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -27,6 +28,7 @@ type ConfigMap struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ConfigManager struct {
|
type ConfigManager struct {
|
||||||
|
configName string
|
||||||
configFileUsed string
|
configFileUsed string
|
||||||
configType configType
|
configType configType
|
||||||
envPrefix string
|
envPrefix string
|
||||||
@@ -57,10 +59,14 @@ func NewConfigManager(automaticEnv bool) *ConfigManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) ConfigFileUsed() string {
|
func (c *ConfigManager) ConfigFileUsed() string {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
return c.configFileUsed
|
return c.configFileUsed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) UseExplicitDefaults(enable bool) {
|
func (c *ConfigManager) UseExplicitDefaults(enable bool) {
|
||||||
|
c.mutex.Lock()
|
||||||
|
defer c.mutex.Unlock()
|
||||||
c.explicitDefaults = enable
|
c.explicitDefaults = enable
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,21 +122,137 @@ func (c *ConfigManager) WriteConfig() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetBool(key string) bool {
|
func (c *ConfigManager) GetBool(key string) bool {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
val := v.Value
|
||||||
|
switch val := val.(type) {
|
||||||
|
case bool:
|
||||||
|
return val
|
||||||
|
case string:
|
||||||
|
if strings.ToLower(val) == "true" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
case int:
|
||||||
|
if val == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
case float32, float64:
|
||||||
|
if val == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
case nil:
|
||||||
|
return false
|
||||||
|
case time.Duration:
|
||||||
|
if val == 0 || val < 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return val.(bool)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetDuration(key string) time.Duration {
|
func (c *ConfigManager) GetDuration(key string) time.Duration {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
val := v.Value
|
||||||
|
switch val := val.(type) {
|
||||||
|
case time.Duration:
|
||||||
|
return val
|
||||||
|
case string:
|
||||||
|
d, err := time.ParseDuration(val)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
case int:
|
||||||
|
return time.Duration(val)
|
||||||
|
case float32:
|
||||||
|
return time.Duration(val)
|
||||||
|
case float64:
|
||||||
|
return time.Duration(val)
|
||||||
|
case nil:
|
||||||
|
return 0
|
||||||
|
default:
|
||||||
|
return val.(time.Duration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetString(key string) string {
|
func (c *ConfigManager) GetString(key string) string {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
switch val := v.Value.(type) {
|
||||||
|
case string:
|
||||||
|
return val
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%v", v.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetStringMap(key string) map[string]any {
|
func (c *ConfigManager) GetStringMap(key string) map[string]any {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
switch val := v.Value.(type) {
|
||||||
|
case map[string]any:
|
||||||
|
return val
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetStringSlice(key string) []string {
|
func (c *ConfigManager) GetStringSlice(key string) []string {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
switch val := v.Value.(type) {
|
||||||
|
case []string:
|
||||||
|
return val
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetInt(key string) int {
|
func (c *ConfigManager) GetInt(key string) int {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
switch val := v.Value.(type) {
|
||||||
|
case int:
|
||||||
|
return val
|
||||||
|
case string:
|
||||||
|
i, err := strconv.Atoi(val)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
case float32:
|
||||||
|
return int(val)
|
||||||
|
case float64:
|
||||||
|
return int(val)
|
||||||
|
case nil:
|
||||||
|
return 0
|
||||||
|
default:
|
||||||
|
return val.(int)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) SetConfigType(configType string) error {
|
func (c *ConfigManager) SetConfigType(configType string) error {
|
||||||
@@ -166,6 +288,17 @@ func (c *ConfigManager) SetDefault(key string, value any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) GetIntSlice(key string) []int {
|
func (c *ConfigManager) GetIntSlice(key string) []int {
|
||||||
|
c.mutex.RLock()
|
||||||
|
defer c.mutex.RUnlock()
|
||||||
|
if v, ok := c.combinedConfig[strings.ToLower(key)]; ok {
|
||||||
|
switch val := v.Value.(type) {
|
||||||
|
case []int:
|
||||||
|
return val
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) ReadInConfig() error {
|
func (c *ConfigManager) ReadInConfig() error {
|
||||||
@@ -214,8 +347,13 @@ func readFile(filename string, fileType configType) (map[string]any, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) SetConfigName(name string) {
|
func (c *ConfigManager) SetConfigName(name string) {
|
||||||
|
c.mutex.Lock()
|
||||||
|
defer c.mutex.Unlock()
|
||||||
|
c.configName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigManager) SetConfigFile(file string) {
|
func (c *ConfigManager) SetConfigFile(file string) {
|
||||||
|
c.mutex.Lock()
|
||||||
|
defer c.mutex.Unlock()
|
||||||
c.configFileUsed = file
|
c.configFileUsed = file
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user