github.com/docker/compose-on-kubernetes@v0.5.0/internal/flags/envstring.go (about) 1 package flags 2 3 import ( 4 "flag" 5 "os" 6 7 "github.com/spf13/pflag" 8 ) 9 10 type envString struct { 11 isSet bool 12 defaultValue string 13 explicitValue string 14 envVarName string 15 } 16 17 // Flag represents the flag registration 18 type Flag interface { 19 String() string 20 } 21 22 func (v *envString) String() string { 23 if v.isSet { 24 return v.explicitValue 25 } 26 if envValue, ok := os.LookupEnv(v.envVarName); ok { 27 return envValue 28 } 29 return v.defaultValue 30 } 31 32 func (v *envString) Set(value string) error { 33 v.isSet = true 34 v.explicitValue = value 35 return nil 36 } 37 38 func (v *envString) Type() string { 39 return "string" 40 } 41 42 // EnvStringCobra register an environment-backed string variable to the flagset 43 func EnvStringCobra(flags *pflag.FlagSet, name, defaultValue, envVarName, usage string) *pflag.Flag { 44 return flags.VarPF(&envString{defaultValue: defaultValue, envVarName: envVarName}, name, "", usage) 45 } 46 47 // EnvString register an environment-backed string variable to the go runtime flag set 48 func EnvString(name, defaultValue, envVarName, usage string) Flag { 49 f := &envString{defaultValue: defaultValue, envVarName: envVarName} 50 flag.Var(f, name, usage) 51 return f 52 }