61 lines
1.5 KiB
Plaintext
61 lines
1.5 KiB
Plaintext
package envs
|
|
|
|
/*
|
|
EnvMapper contains the environment variables as grouped by their basic type.
|
|
If a variable's type cannot be determined, it's placed in Strings.
|
|
If a variable's type is a list, it will be an []interface{} as each item may be a different variable type.
|
|
It essentially is the same as EnvMap except with the types split out for convenience.
|
|
*/
|
|
type EnvMapper struct {
|
|
Booleans map[string]bool `json:"bools"`
|
|
Numbers map[string]int `json:"nums"`
|
|
Strings map[string]string `json:"strings"`
|
|
Lists map[string][]interface{} `json:"lists"`
|
|
}
|
|
|
|
// GetEnvMapper returns a pointer to a populated EnvMapper.
|
|
func GetEnvMapper() (e *EnvMapper, err error) {
|
|
|
|
var em map[string]interface{}
|
|
var env EnvMapper
|
|
|
|
env = EnvMapper{
|
|
Booleans: nil,
|
|
Numbers: nil,
|
|
Strings: nil,
|
|
Lists: nil,
|
|
}
|
|
|
|
for k, v := range em {
|
|
|
|
switch t := v.(type) {
|
|
case bool:
|
|
if env.Booleans == nil {
|
|
env.Booleans = make(map[string]bool, 0)
|
|
}
|
|
env.Booleans[k] = t
|
|
continue
|
|
case int:
|
|
if env.Numbers == nil {
|
|
env.Numbers = make(map[string]int, 0)
|
|
}
|
|
env.Numbers[k] = t
|
|
continue
|
|
case []interface{}:
|
|
if env.Lists == nil {
|
|
env.Lists = make(map[string][]interface{}, 0)
|
|
}
|
|
env.Lists[k] = t
|
|
case string: // the "default" since everything could probably be typeswitched to a string otherwise.
|
|
if env.Strings == nil {
|
|
env.Strings = make(map[string]string, 0)
|
|
}
|
|
env.Strings[k] = t
|
|
}
|
|
}
|
|
|
|
*e = env
|
|
|
|
return
|
|
}
|