Documentation
¶
Index ¶
- Variables
- func Any[T any](name string, defVal T, desc string, create func(T, *T) Value, opts ...OptNode) *T
- func Bool(name string, defVal bool, desc string, opts ...OptNode) *bool
- func Bools(name string, value []bool, usage string, opts ...OptNode) *[]bool
- func Dur(name string, value time.Duration, usage string, opts ...OptNode) *time.Duration
- func Durs(name string, defValue []time.Duration, desc string, opts ...OptNode) *[]time.Duration
- func Float32(name string, value float32, usage string, opts ...OptNode) *float32
- func Float64(name string, value float64, usage string, opts ...OptNode) *float64
- func Floats32(name string, value []float32, usage string, opts ...OptNode) *[]float32
- func Floats64(name string, value []float64, usage string, opts ...OptNode) *[]float64
- func IP(name string, defValue string, desc string, opts ...OptNode) *net.IP
- func IPs(name string, defValue []string, desc string, opts ...OptNode) *[]net.IP
- func Int(name string, defVal int, desc string, opts ...OptNode) *int
- func Int32(name string, defVal int32, desc string, opts ...OptNode) *int32
- func Int64(name string, defVal int64, desc string, opts ...OptNode) *int64
- func Ints(name string, defVal []int, desc string, opts ...OptNode) *[]int
- func IsUnknown(err error) (map[string][]string, bool)
- func Map(name string, defVal map[string]any, desc string, opts ...OptNode) map[string]any
- func Parse(ps ...Provider) error
- func Show() string
- func Str(name string, defVal string, desc string, opts ...OptNode) *string
- func Strs(name string, defVal []string, desc string, opts ...OptNode) *[]string
- func ToString(v any) string
- func Uint(name string, defVal uint, desc string, opts ...OptNode) *uint
- func Uint32(name string, defVal uint32, desc string, opts ...OptNode) *uint32
- func Uint64(name string, defVal uint64, desc string, opts ...OptNode) *uint64
- type Grp
- type OptNode
- type Provider
- type UnknownFieldError
- type Value
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNoSuchKey is returned when a configuration key is not registered as an option. ErrNoSuchKey = errors.New("no such key") // ErrCollidingAlias is returned when an alias collides with an existing key. ErrCollidingAlias = errors.New("colliding alias with key") // ErrDuplicateKey is returned when a duplicate configuration key is registered. ErrDuplicateKey = errors.New("duplicate key") // ErrRequired is returned when required configuration fields are missing. ErrRequired = errors.New("missing required fields") // ErrRuntimeRegistration is returned when attempting to register options at runtime. ErrRuntimeRegistration = errors.New("misuse: runtime var registration is not allowed") // ErrDoubleParse is returned when Parse is called more than once. ErrDoubleParse = errors.New("misuse: Parse func should be called once") )
Functions ¶
func Any ¶
Any registers a custom configuration option type and returns a pointer to its value.
Usage Example:
// Custom type
type MyType struct { V string }
func newValue(val MyType, p *MyType) Value {
*p = val
return (*MyType)(p)
}
func (m *MyType) Set(s string) error { m.V = s; return nil }
func (m *MyType) Type() string { return "custom" }
// User-friendly registration function
func Custom(name string, defVal MyType, desc string, opts ...zfg.OptNode) *MyType {
return zfg.Any(name, defVal, desc, newValue, opts...)
}
// Register custom option
myOpt := Custom("custom.opt", MyType{"default"}, "custom option")
Arguments:
- name: unique option key (dot-separated for hierarchy)
- defVal: default value of type T
- desc: description for documentation and rendering
- create: function to create a Value implementation for T (see example above)
- opts: optional OptNode modifiers (e.g., Alias, Secret, Required)
Behavior:
- Registers the option at import time; panics if called after Parse.
- Returns a pointer to the registered value, which is updated by configuration sources.
func Bool ¶
Bool registers a boolean configuration option and returns a pointer to its value.
Usage:
debug := zerocfg.Bool("debug", false, "enable debug mode")
func Bools ¶
Bools registers a slice of boolean configuration options and returns a pointer to its value.
Usage:
flags := zerocfg.Bools("feature.flags", []bool{true, false}, "feature flags")
func Dur ¶
Dur registers a time.Duration configuration option and returns a pointer to its value.
Usage:
timeout := zerocfg.Dur("timeout", 5*time.Second, "timeout for operation")
func Durs ¶
Durs registers a slice of time.Duration configuration options and returns a pointer to its value.
Usage:
intervals := zerocfg.Durs("intervals", []time.Duration{time.Second, 2 * time.Second}, "interval durations")
func Float32 ¶
Float32 registers a float32 configuration option and returns a pointer to its value.
Usage:
ratio := zerocfg.Float32("ratio", 0.25, "ratio value")
func Float64 ¶
Float64 registers a float64 configuration option and returns a pointer to its value.
Usage:
threshold := zerocfg.Float64("threshold", 0.5, "threshold value")
func Floats32 ¶
Floats32 registers a slice of float32 configuration options and returns a pointer to its value.
Usage:
factors := zerocfg.Floats32("factors", []float32{0.1, 0.2}, "factor values")
func Floats64 ¶
Floats64 registers a slice of float64 configuration options and returns a pointer to its value.
Usage:
weights := zerocfg.Floats64("weights", []float64{1.1, 2.2}, "weight values")
func IP ¶
IP registers a net.IP configuration option and returns a pointer to its value.
Usage:
dbIP := zerocfg.IP("db.ip", "127.0.0.1", "database IP address")
func Int ¶
Int registers an int configuration option and returns a pointer to its value.
Usage:
port := zerocfg.Int("db.port", 5432, "database port")
func Int32 ¶
Int32 registers an int32 configuration option and returns a pointer to its value.
Usage:
code := zerocfg.Int32("status.code", 200, "status code")
func Int64 ¶
Int64 registers an int64 configuration option and returns a pointer to its value.
Usage:
big := zerocfg.Int64("big.value", 1234567890, "big int value")
func Ints ¶
Ints registers a slice of int configuration options and returns a pointer to its value.
Usage:
ids := zerocfg.Ints("user.ids", []int{1, 2, 3}, "user IDs")
func IsUnknown ¶ added in v0.1.1
IsUnknown checks if the provided error is an UnknownFieldError. If so, it returns the underlying map and true. Otherwise, it returns nil and false.
Example usage:
err := zfg.Parse(...)
if u, ok := zfg.IsUnknown(err); ok {
// u is map[source_name][]unknown_keys
}
func Map ¶
Map registers a map[string]any configuration option and returns the map value.
Usage:
limits := zerocfg.Map("limits", map[string]any{"max": 10, "min": 1}, "map of limits")
func Parse ¶
Parse loads configuration from the provided sources in priority order.
Usage:
err := zerocfg.Parse(env.New(), yaml.New(path))
Priority:
- Command-line flags (always highest)
- Parsers in the order provided (first = higher priority)
- Default values (lowest)
Behavior:
- Applies each parser in order, setting values for registered options only.
- Returns an error if unknown options are found (unless ignored by IsUnknown).
Error Handling:
- UnknownFieldError: for unknown keys (see IsUnknown)
- ErrRequired: for missing required options
- ErrDoubleParse: if called multiple times
func Show ¶ added in v0.1.2
func Show() string
Show returns a formatted string representation of all registered configuration options and their current values.
func Str ¶
Str registers a string configuration option and returns a pointer to its value.
Usage:
username := zerocfg.Str("db.user", "guest", "user of database")
func Strs ¶
Strs registers a slice of string configuration options and returns a pointer to its value.
Usage:
hosts := zerocfg.Strs("hosts", []string{"a", "b"}, "list of hosts")
func ToString ¶
ToString returns a string representation of any value for use in configuration serialization and display.
The conversion rules are as follows:
- If the value implements fmt.Stringer, its String() method is used.
- For slices or arrays whose elements implement fmt.Stringer, a JSON array of their string values is returned.
- For other slices, arrays, or maps, the value is marshaled to JSON.
- For all other types, fmt.Sprint is used.
ToString is used internally by zerocfg for representing option values as strings, including when passing ToString to custom parsers and for rendering configuration output.
func Uint ¶
Uint registers a uint configuration option and returns a pointer to its value.
Usage:
port := zerocfg.Uint("db.port", 5678, "database port")
Types ¶
type Grp ¶
type Grp struct {
// contains filtered or unexported fields
}
Grp represents a group of configuration options that can share a common prefix and set of option modifiers. Groups are useful for organizing related configuration options and applying shared modifiers.
func NewGroup ¶
NewGroup creates a new Grp with the specified prefix and option modifiers. All options added to this group will have the prefix prepended to their names.
Example:
g := NewGroup("db")
Str("host", "localhost", "db host", Group(g)) // becomes "db.host"
func NewOptions ¶
NewOptions creates a new Grp with no prefix but with shared option modifiers. This is useful for applying the same modifiers (e.g., Secret, Required) to multiple options without a hierarchical prefix.
Example:
g := NewOptions(Secret())
Str("api_key", "", "API key", Group(g)) // marked as secret
type OptNode ¶
type OptNode func(*node)
OptNode is a function that modifies a node during option registration. It is used to apply additional behaviors such as aliases, secret marking, grouping, or required flags.
Example:
Int("db.port", 5432, "database port", Alias("p"), Required())
func Alias ¶
Alias returns an OptNode that adds an alias to a configuration option. Aliases allow options to be referenced by alternative names (e.g., for CLI flags).
Example:
port := Int("db.port", 5432, "database port", Alias("p"))
func Group ¶
Group returns an OptNode that applies a Grp to a configuration option. This sets the option's name prefix and applies all group modifiers.
Example:
g := NewGroup("db")
host := Str("host", "localhost", "db host", Group(g)) // becomes "db.host"
type Provider ¶ added in v0.1.6
type Provider interface {
Type() string
Provide(awaited map[string]bool, conv func(any) string) (found, unknown map[string]string, err error)
}
Provider defines a configuration source for zerocfg.
Custom sources must implement this interface to provide configuration values.
Methods:
- Type() string: returns the parser's type name (e.g., "env", "yaml").
- Parse(awaited, conv):
- awaited: map of option names and aliases to expect (true = option, false = alias)
- conv: function to convert values to string (usually zerocfg.ToString)
Returns:
- found: map of recognized option names to string values
- unknown: map of unrecognized names to string values
type UnknownFieldError ¶ added in v0.1.1
UnknownFieldError represents a mapping from configuration source names to unknown option keys encountered during parsing. It is returned by Parse when unknown values are found in configuration sources.
func (UnknownFieldError) Error ¶ added in v0.1.1
func (e UnknownFieldError) Error() string
type Value ¶
Value is the interface implemented by all configuration option types in zerocfg.
Requirements:
- Must support setting its value from a string: Set(string) error The string is produced by zerocfg's ToString conversion.
- Must report its type name for identification and documentation: Type() string