updated ezconf

This commit is contained in:
2026-01-21 19:23:12 +11:00
parent 0ceeb37058
commit da6ad0cf2e
4 changed files with 307 additions and 29 deletions

View File

@@ -18,16 +18,16 @@ type EnvVar struct {
// ConfigLoader manages configuration loading from multiple sources
type ConfigLoader struct {
configFuncs map[string]ConfigFunc // Map of config names to ConfigFromEnv functions
packagePaths []string // Paths to packages to parse for ENV comments
groupNames map[string]string // Map of package paths to group names
extraEnvVars []EnvVar // Additional environment variables to track
envVars []EnvVar // All extracted environment variables
configs map[string]interface{} // Loaded configurations
configFuncs map[string]ConfigFunc // Map of config names to ConfigFromEnv functions
packagePaths []string // Paths to packages to parse for ENV comments
groupNames map[string]string // Map of package paths to group names
extraEnvVars []EnvVar // Additional environment variables to track
envVars []EnvVar // All extracted environment variables
configs map[string]any // Loaded configurations
}
// ConfigFunc is a function that loads configuration from environment variables
type ConfigFunc func() (interface{}, error)
type ConfigFunc func() (any, error)
// New creates a new ConfigLoader
func New() *ConfigLoader {
@@ -37,7 +37,7 @@ func New() *ConfigLoader {
groupNames: make(map[string]string),
extraEnvVars: make([]EnvVar, 0),
envVars: make([]EnvVar, 0),
configs: make(map[string]interface{}),
configs: make(map[string]any),
}
}
@@ -72,8 +72,12 @@ func (cl *ConfigLoader) AddEnvVar(envVar EnvVar) {
cl.extraEnvVars = append(cl.extraEnvVars, envVar)
}
// Load loads all configurations and extracts environment variables
func (cl *ConfigLoader) Load() error {
// ParseEnvVars extracts environment variables from packages and extra vars
// This can be called without having actual environment variables set
func (cl *ConfigLoader) ParseEnvVars() error {
// Clear existing env vars to prevent duplicates
cl.envVars = make([]EnvVar, 0)
// Parse packages for ENV comments
for _, pkgPath := range cl.packagePaths {
envVars, err := ParseConfigPackage(pkgPath)
@@ -102,6 +106,12 @@ func (cl *ConfigLoader) Load() error {
cl.envVars[i].CurrentValue = os.Getenv(cl.envVars[i].Name)
}
return nil
}
// LoadConfigs executes the config functions to load actual configurations
// This should be called after environment variables are properly set
func (cl *ConfigLoader) LoadConfigs() error {
// Load configurations
for name, fn := range cl.configFuncs {
cfg, err := fn()
@@ -114,14 +124,22 @@ func (cl *ConfigLoader) Load() error {
return nil
}
// Load loads all configurations and extracts environment variables
func (cl *ConfigLoader) Load() error {
if err := cl.ParseEnvVars(); err != nil {
return err
}
return cl.LoadConfigs()
}
// GetConfig returns a loaded configuration by name
func (cl *ConfigLoader) GetConfig(name string) (interface{}, bool) {
func (cl *ConfigLoader) GetConfig(name string) (any, bool) {
cfg, ok := cl.configs[name]
return cfg, ok
}
// GetAllConfigs returns all loaded configurations
func (cl *ConfigLoader) GetAllConfigs() map[string]interface{} {
func (cl *ConfigLoader) GetAllConfigs() map[string]any {
return cl.configs
}