Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
113ff46fee
|
|||
5262d7abb7
|
|||
2efc1a155e
|
26
envconf.go
26
envconf.go
@ -24,6 +24,8 @@ type Config struct {
|
||||
parsed bool
|
||||
env map[string]cEntry
|
||||
mapEnv map[string]map[string]string
|
||||
mapMapEnv map[string]map[string]map[string]string
|
||||
mapMapMapEnv map[string]map[string]map[string]map[string]string
|
||||
}
|
||||
|
||||
// NewConfig returns an envconf.Config that is used to read configuration from environment variables.
|
||||
@ -34,6 +36,8 @@ func NewConfig() *Config {
|
||||
config.parsed = false
|
||||
config.env = make(map[string]cEntry)
|
||||
config.mapEnv = make(map[string]map[string]string)
|
||||
config.mapMapEnv = make(map[string]map[string]map[string]string)
|
||||
config.mapMapMapEnv = make(map[string]map[string]map[string]map[string]string)
|
||||
|
||||
for _, v := range os.Environ() {
|
||||
splitted := strings.SplitN(v, "=", 2)
|
||||
@ -54,9 +58,28 @@ func NewConfig() *Config {
|
||||
right := strings.Join(splitted[count:], "_")
|
||||
if len(config.mapEnv[left]) == 0 {
|
||||
config.mapEnv[left] = make(map[string]string)
|
||||
config.mapMapEnv[left] = make(map[string]map[string]string)
|
||||
config.mapMapMapEnv[left] = make(map[string]map[string]map[string]string)
|
||||
}
|
||||
fmt.Printf("left=(%s), right=(%s), key=(%s)\n", left, right, key)
|
||||
config.mapEnv[left][right] = key
|
||||
if count < len(splitted)-2 {
|
||||
middle := splitted[count]
|
||||
right = strings.Join(splitted[count+1:], "_")
|
||||
if len(config.mapMapEnv[left][middle]) == 0 {
|
||||
config.mapMapEnv[left][middle] = make(map[string]string)
|
||||
config.mapMapMapEnv[left][middle] = make(map[string]map[string]string)
|
||||
}
|
||||
config.mapMapEnv[left][middle][right] = key
|
||||
}
|
||||
if count < len(splitted)-3 {
|
||||
lmiddle := splitted[count]
|
||||
rmiddle := splitted[count+1]
|
||||
right = strings.Join(splitted[count+2:], "_")
|
||||
if len(config.mapMapEnv[left][lmiddle][rmiddle]) == 0 {
|
||||
config.mapMapMapEnv[left][lmiddle][rmiddle] = make(map[string]string)
|
||||
}
|
||||
config.mapMapMapEnv[left][lmiddle][rmiddle][right] = key
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -89,7 +112,6 @@ func (c *Config) DefineMap(key string, dtype DataType) {
|
||||
entries, ok := c.mapEnv[key]
|
||||
if ok {
|
||||
for _, key = range entries {
|
||||
fmt.Printf("key-from-define-map (%s)\n", key)
|
||||
entry := c.env[key]
|
||||
entry.dtype = dtype
|
||||
c.env[key] = entry
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
func main() {
|
||||
conf := envconf.NewConfig()
|
||||
conf.Define("this_is_a_map", envconf.TypeInt)
|
||||
conf.Define("test_map", envconf.TypeInt)
|
||||
conf.DefineMap("test_map", envconf.TypeInt)
|
||||
conf.Parse()
|
||||
conf.Status()
|
||||
|
||||
|
Reference in New Issue
Block a user