rconfig: github.com/Luzifer/rconfig Index | Examples | Files

package rconfig

import "github.com/Luzifer/rconfig"

Package rconfig implements a CLI configuration reader with struct-embedded defaults, environment variables and posix compatible flag parsing using the pflag library.

Index

Examples

Package Files

autoenv.go config.go vardefault_providers.go

func AddTimeParserFormats Uses

func AddTimeParserFormats(f ...string)

AddTimeParserFormats adds custom formats to parse time.Time fields

func Args Uses

func Args() []string

Args returns the non-flag command-line arguments.

func AutoEnv Uses

func AutoEnv(enable bool)

AutoEnv enables or disables automated env variable guessing. If no `env` struct tag was set and AutoEnv is enabled the env variable name is derived from the name of the field: `MyFieldName` will get `MY_FIELD_NAME`

func Parse Uses

func Parse(config interface{}) error

Parse takes the pointer to a struct filled with variables which should be read from ENV, default or flag. The precedence in this is flag > ENV > default. So if a flag is specified on the CLI it will overwrite the ENV and otherwise ENV overwrites the default specified.

For your configuration struct you can use the following struct-tags to control the behavior of rconfig:

default: Set a default value
vardefault: Read the default value from the variable defaults
env: Read the value from this environment variable
flag: Flag to read in format "long,short" (for example "listen,l")
description: A help text for Usage output to guide your users

The format you need to specify those values you can see in the example to this function.

Code:

// We're building an example configuration with a sub-struct to be filled
// by the Parse command.
config := struct {
    Username string `default:"unknown" flag:"user,u" description:"Your name"`
    Details  struct {
        Age int `default:"25" flag:"age" description:"Your age"`
    }
}{}

// To have more relieable results we're setting os.Args to a known value.
// In real-life use cases you wouldn't do this but parse the original
// commandline arguments.
os.Args = []string{
    "example",
    "--user=Luzifer",
}

Parse(&config)

fmt.Printf("Hello %s, happy birthday for your %dth birthday.",
    config.Username,
    config.Details.Age)

// You can also show an usage message for your user
Usage()

Output:

Hello Luzifer, happy birthday for your 25th birthday.

func ParseAndValidate Uses

func ParseAndValidate(config interface{}) error

ParseAndValidate works exactly like Parse but implements an additional run of the go-validator package on the configuration struct. Therefore additonal struct tags are supported like described in the readme file of the go-validator package:

https://github.com/go-validator/validator/tree/v2#usage

func SetVariableDefaults Uses

func SetVariableDefaults(defaults map[string]string)

SetVariableDefaults presets the parser with a map of default values to be used when specifying the vardefault tag

func Usage Uses

func Usage()

Usage prints a basic usage with the corresponding defaults for the flags to os.Stdout. The defaults are derived from the `default` struct-tag and the ENV.

func VarDefaultsFromYAML Uses

func VarDefaultsFromYAML(in []byte) map[string]string

VarDefaultsFromYAML creates a vardefaults map from YAML raw data

func VarDefaultsFromYAMLFile Uses

func VarDefaultsFromYAMLFile(filename string) map[string]string

VarDefaultsFromYAMLFile reads contents of a file and calls VarDefaultsFromYAML

Package rconfig imports 11 packages (graph) and is imported by 23 packages. Updated 2019-02-08. Refresh now. Tools for package owners.