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}