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 env := os.Environ()
21 if len(env) == 0 {
22 return nil
23 }
24 return env
25}
26
27func New() Env {
28 return &osEnv{}
29}
30
31type mapEnv struct {
32 m map[string]string
33}
34
35// Get implements Env.
36func (m *mapEnv) Get(key string) string {
37 if value, ok := m.m[key]; ok {
38 return value
39 }
40 return ""
41}
42
43// Env implements Env.
44func (m *mapEnv) Env() []string {
45 if len(m.m) == 0 {
46 return nil
47 }
48 env := make([]string, 0, len(m.m))
49 for k, v := range m.m {
50 env = append(env, k+"="+v)
51 }
52 return env
53}
54
55func NewFromMap(m map[string]string) Env {
56 if m == nil {
57 m = make(map[string]string)
58 }
59 return &mapEnv{m: m}
60}