1// Copyright 2017 Oliver Eilhard. All rights reserved. 2// Use of this source code is governed by a MIT-license. 3// See http://olivere.mit-license.org/license.txt for details. 4 5package env 6 7import ( 8 "os" 9 "strconv" 10 "time" 11) 12 13type envGetter func(string) string 14 15// getter allows mocking os.Getenv in tests. 16var getter envGetter = os.Getenv 17 18// String inspects the environment variables specified in envvars. 19// If all of these environment variables are empty, it returns defaultValue. 20func String(defaultValue string, envvars ...string) string { 21 for _, envvar := range envvars { 22 if s := getter(envvar); s != "" { 23 return s 24 } 25 } 26 return defaultValue 27} 28 29// Int inspects the environment variables specified in envvars. 30// If all of these environment variables are empty, it returns defaultValue. 31func Int(defaultValue int, envvars ...string) int { 32 for _, envvar := range envvars { 33 if s := getter(envvar); s != "" { 34 if i, err := strconv.Atoi(s); err == nil { 35 return i 36 } 37 } 38 } 39 return defaultValue 40} 41 42// Int64 inspects the environment variables specified in envvars. 43// If all of these environment variables are empty, it returns defaultValue. 44func Int64(defaultValue int64, envvars ...string) int64 { 45 for _, envvar := range envvars { 46 if s := getter(envvar); s != "" { 47 if i, err := strconv.ParseInt(s, 10, 64); err == nil { 48 return i 49 } 50 } 51 } 52 return defaultValue 53} 54 55// Float32 inspects the environment variables specified in envvars. 56// If all of these environment variables are empty, it returns defaultValue. 57func Float32(defaultValue float32, envvars ...string) float32 { 58 for _, envvar := range envvars { 59 if s := getter(envvar); s != "" { 60 if f, err := strconv.ParseFloat(s, 32); err == nil { 61 return float32(f) 62 } 63 } 64 } 65 return defaultValue 66} 67 68// Float64 inspects the environment variables specified in envvars. 69// If all of these environment variables are empty, it returns defaultValue. 70func Float64(defaultValue float64, envvars ...string) float64 { 71 for _, envvar := range envvars { 72 if s := getter(envvar); s != "" { 73 if f, err := strconv.ParseFloat(s, 64); err == nil { 74 return f 75 } 76 } 77 } 78 return defaultValue 79} 80 81// Bool inspects the environment variables specified in envvars. 82// If all of these environment variables are empty, it returns defaultValue. 83func Bool(defaultValue bool, envvars ...string) bool { 84 for _, envvar := range envvars { 85 if s := getter(envvar); s != "" { 86 if flag, err := strconv.ParseBool(s); err == nil { 87 return flag 88 } 89 } 90 } 91 return defaultValue 92} 93 94// Time inspects the environment variables specified in envvars. 95// If all of these environment variables are empty, it returns defaultValue. 96func Time(defaultValue time.Time, layout string, envvars ...string) time.Time { 97 for _, envvar := range envvars { 98 if s := getter(envvar); s != "" { 99 if d, err := time.Parse(layout, s); err == nil { 100 return d 101 } 102 } 103 } 104 return defaultValue 105} 106 107// Duration inspects the environment variables specified in envvars. 108// If all of these environment variables are empty, it returns defaultValue. 109func Duration(defaultValue time.Duration, envvars ...string) time.Duration { 110 for _, envvar := range envvars { 111 if s := getter(envvar); s != "" { 112 if d, err := time.ParseDuration(s); err == nil { 113 return d 114 } 115 } 116 } 117 return defaultValue 118} 119