2022-02-13 18:51:38 +01:00

73 lines
1.2 KiB
Go

package env
import (
"fmt"
"log"
"os"
"sort"
"strconv"
)
type Env struct {
fallback map[string]string
current map[string]string
}
func New() *Env {
return &Env{
fallback: map[string]string{},
current: map[string]string{},
}
}
func (e *Env) Get(key, fallback string) string {
e.fallback[key] = fallback
e.current[key] = fallback
if value, ok := os.LookupEnv(key); ok {
e.current[key] = value
return value
}
return fallback
}
func (e *Env) GetUInt(key string, fallback uint) uint {
e.fallback[key] = fmt.Sprint(fallback)
e.current[key] = fmt.Sprint(fallback)
if value, ok := os.LookupEnv(key); ok {
uvalue, err := strconv.Atoi(value)
if err != nil {
log.Fatal(err)
}
if uvalue <= 0 {
log.Fatalf("env %s need to greater than 0", key)
}
e.current[key] = fmt.Sprint(uvalue)
return uint(uvalue)
}
return fallback
}
type Result struct {
Key string
Value string
}
func (e *Env) sort(o map[string]string) []Result {
r := make([]Result, 0, len(o))
for k := range o {
r = append(r, Result{k, o[k]})
}
sort.Slice(r, func(i, j int) bool {
return r[i].Key < r[j].Key
})
return r
}
func (e *Env) Current() []Result {
return e.sort(e.current)
}
func (e *Env) Fallback() []Result {
return e.sort(e.fallback)
}