heruvym/getenv.go
2021-04-10 21:46:51 +03:00

50 lines
966 B
Go

package main
import (
"bitbucket.org/BlackBroker/heruvym/app"
"errors"
"os"
"reflect"
"strconv"
"strings"
)
func getEnv() app.Options {
var res app.Options
r := reflect.ValueOf(res)
for i := 0; i < r.NumField(); i++ {
v := r.Type().Field(i).Tag.Get(app.ENV)
d := r.Type().Field(i).Tag.Get(app.DEFAULT)
env, ok := os.LookupEnv(v)
var val string
if ok {
val = env
} else {
val = d
}
switch t := r.Type().Field(i).Type.Name(); t {
case "string":
reflect.ValueOf(&res).Elem().Field(i).SetString(val)
case "bool":
if strings.ToLower(val) == "true" {
reflect.ValueOf(&res).Elem().Field(i).SetBool(true)
} else {
reflect.ValueOf(&res).Elem().Field(i).SetBool(false)
}
case "uint64":
num, err := strconv.ParseUint(val, 10, 64)
if err != nil {
panic(err)
}
reflect.ValueOf(&res).Elem().Field(i).SetUint(num)
default:
panic(errors.New("Something strange happend: " + t))
}
}
return res
}