예제 #1
0
파일: gofig_pflag.go 프로젝트: akutz/gofig
func (c *config) processRegKeys(r types.ConfigRegistration) {
	fsn := fmt.Sprintf("%s Flags", r.Name())
	fs, ok := c.flagSets[fsn]
	if !ok {
		fs = &pflag.FlagSet{}
		c.flagSets[fsn] = fs
	}

	for k := range r.Keys() {

		if fs.Lookup(k.FlagName()) != nil {
			continue
		}

		evn := k.EnvVarName()

		if LogRegKey {
			log.WithFields(log.Fields{
				"keyName":      k.KeyName(),
				"keyType":      k.KeyType(),
				"flagName":     k.FlagName(),
				"envVar":       evn,
				"defaultValue": k.DefaultValue(),
				"usage":        k.Description(),
			}).Debug("adding flag")
		}

		// bind the environment variable
		c.v.BindEnv(k.KeyName(), evn)

		if k.Short() == "" {
			switch k.KeyType() {
			case String, SecureString:
				fs.String(k.FlagName(), k.DefaultValue().(string), k.Description())
			case Int:
				fs.Int(k.FlagName(), k.DefaultValue().(int), k.Description())
			case Bool:
				fs.Bool(k.FlagName(), k.DefaultValue().(bool), k.Description())
			}
		} else {
			switch k.KeyType() {
			case String, SecureString:
				fs.StringP(k.FlagName(), k.Short(), k.DefaultValue().(string), k.Description())
			case Int:
				fs.IntP(k.FlagName(), k.Short(), k.DefaultValue().(int), k.Description())
			case Bool:
				fs.BoolP(k.FlagName(), k.Short(), k.DefaultValue().(bool), k.Description())
			}
		}

		c.v.BindPFlag(k.KeyName(), fs.Lookup(k.FlagName()))
	}
}
예제 #2
0
func (c *config) processRegKeys(r types.ConfigRegistration) {
	for k := range r.Keys() {
		c.v.BindEnv(k.KeyName(), k.EnvVarName())
	}
}