60 lines
994 B
Go
60 lines
994 B
Go
package env
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
type Vars struct {
|
|
vals map[string]string
|
|
ignoreCase bool
|
|
}
|
|
|
|
func varsFromEnv(env []string, ignoreCase bool, removeKey func(string) bool) *Vars {
|
|
vars := NewVars(nil, ignoreCase)
|
|
for _, kv := range env {
|
|
parts := strings.SplitN(kv, "=", 2)
|
|
if len(parts) != 2 {
|
|
continue
|
|
}
|
|
if removeKey(parts[0]) {
|
|
continue
|
|
}
|
|
vars.Set(parts[0], parts[1])
|
|
}
|
|
return vars
|
|
}
|
|
|
|
func NewVars(vars map[string]string, ignoreCase bool) *Vars {
|
|
s := &Vars{
|
|
vals: map[string]string{},
|
|
ignoreCase: ignoreCase,
|
|
}
|
|
for k, v := range vars {
|
|
s.Set(k, v)
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (s *Vars) Get(key string) string {
|
|
return s.vals[s.key(key)]
|
|
}
|
|
|
|
func (s *Vars) Set(key, value string) {
|
|
s.vals[s.key(key)] = value
|
|
}
|
|
|
|
func (s *Vars) key(k string) string {
|
|
if s.ignoreCase {
|
|
return strings.ToUpper(k)
|
|
}
|
|
return k
|
|
}
|
|
|
|
func (s *Vars) List() []string {
|
|
var result []string
|
|
for k, v := range s.vals {
|
|
result = append(result, k+"="+v)
|
|
}
|
|
return result
|
|
}
|