env.go

 1package env
 2
 3import (
 4	"os"
 5	"testing"
 6)
 7
 8type Env interface {
 9	Get(key string) string
10	Env() []string
11}
12
13type osEnv struct{}
14
15// Get implements Env.
16func (o *osEnv) Get(key string) string {
17	return os.Getenv(key)
18}
19
20func (o *osEnv) Env() []string {
21	env := os.Environ()
22	if len(env) == 0 {
23		return nil
24	}
25	return env
26}
27
28func New() Env {
29	if testing.Testing() {
30		return NewFromMap(nil)
31	}
32	return &osEnv{}
33}
34
35type mapEnv struct {
36	m map[string]string
37}
38
39// Get implements Env.
40func (m *mapEnv) Get(key string) string {
41	if value, ok := m.m[key]; ok {
42		return value
43	}
44	return ""
45}
46
47// Env implements Env.
48func (m *mapEnv) Env() []string {
49	if len(m.m) == 0 {
50		return nil
51	}
52	env := make([]string, 0, len(m.m))
53	for k, v := range m.m {
54		env = append(env, k+"="+v)
55	}
56	return env
57}
58
59func NewFromMap(m map[string]string) Env {
60	if m == nil {
61		m = make(map[string]string)
62	}
63	return &mapEnv{m: m}
64}