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  }