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