1package kingpin
2
3import (
4	"os"
5	"regexp"
6)
7
8var (
9	envVarValuesSeparator = "\r?\n"
10	envVarValuesTrimmer   = regexp.MustCompile(envVarValuesSeparator + "$")
11	envVarValuesSplitter  = regexp.MustCompile(envVarValuesSeparator)
12)
13
14type envarMixin struct {
15	envar   string
16	noEnvar bool
17}
18
19func (e *envarMixin) HasEnvarValue() bool {
20	return e.GetEnvarValue() != ""
21}
22
23func (e *envarMixin) GetEnvarValue() string {
24	if e.noEnvar || e.envar == "" {
25		return ""
26	}
27	return os.Getenv(e.envar)
28}
29
30func (e *envarMixin) GetSplitEnvarValue() []string {
31	values := make([]string, 0)
32
33	envarValue := e.GetEnvarValue()
34	if envarValue == "" {
35		return values
36	}
37
38	// Split by new line to extract multiple values, if any.
39	trimmed := envVarValuesTrimmer.ReplaceAllString(envarValue, "")
40	for _, value := range envVarValuesSplitter.Split(trimmed, -1) {
41		values = append(values, value)
42	}
43
44	return values
45}
46