configbind

package
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 22, 2026 License: Apache-2.0 Imports: 8 Imported by: 9

Documentation

Overview

Package configbind loads Bind-style config from defaults, TOML, env, and CLI into structs.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bind

func Bind[T any](prefix string) *T

Bind allocates *T, registers it for the next Load, and returns the pointer. Code generation must RegisterType[T] before Bind is used.

func EnvName

func EnvName(longOpt string) string

EnvName converts a CLI long option name (without leading dashes) to an env var name. Hyphens become underscores; the result is uppercased.

"port" -> "PORT"
"webserver-host" -> "WEBSERVER_HOST"
"webserver-tls-cert_path" -> "WEBSERVER_TLS_CERT_PATH"

func ReadEnv

func ReadEnv(defs []cliparser.Def, environ []string) map[string]string

ReadEnv maps present environment variables onto stable config keys using CLI long names. For each def, the first Longs entry determines the env var via EnvName; the value is stored under def.ConfigKey. Unset vars are absent from the result. environ is "KEY=value" lines as from os.Environ(); if nil, os.Environ() is used.

func RegisterMeta

func RegisterMeta(m Meta)

RegisterMeta registers generated apply and key metadata for a type name. Called from generated init functions.

func RegisterType

func RegisterType[T any](typeName string, m Meta)

RegisterType associates a Go type parameter T with its generated type name and meta.

func ResetTargets

func ResetTargets()

ResetTargets clears Bind registrations (tests only).

Types

type ApplyFunc

type ApplyFunc func(dst any, o *Overlay) error

ApplyFunc applies an overlay onto a destination pointer without reflection.

type Entry

type Entry struct {
	Raw     string
	Multi   []string
	IsMulti bool
	Place   Place
}

Entry is one winning raw value in the overlay.

type LoadOptions

type LoadOptions struct {
	// Vendor is the configdir vendor name (required when resolving via configdir).
	Vendor string
	// Tool is the application/tool name (required when resolving via configdir).
	Tool string
	// FileName is the config basename (default "config.toml").
	FileName string
	// Args are CLI args without the program name (default os.Args[1:]).
	Args []string
	// Environ is KEY=value lines (default os.Environ()).
	Environ []string
	// ExplicitConfigPath forces a config file path (overrides --config-path when set).
	// Prefer leaving empty and passing --config-path via Args in production.
	ExplicitConfigPath string
}

LoadOptions configures multi-source Bind load.

type LoadResult

type LoadResult struct {
	Overlay    *Overlay
	ConfigPath string
	FoundFile  bool
}

LoadResult holds the overlay after load (for tests/provenance).

func Load

func Load(opts LoadOptions) (*LoadResult, error)

Load merges default → TOML → env → CLI into Bind targets and applies without reflection.

type Meta

type Meta struct {
	// TypeName is the Go type name used for registration (e.g. "WebServerConfig").
	TypeName string
	// KnownKeys lists stable config keys for env and provenance.
	KnownKeys []string
	// FlagMetas builds cliparser defs for this type's fields.
	FlagMetas []cliparser.FieldMeta
	// Defaults maps stable keys to default raw strings applied when absent.
	Defaults map[string]string
	// Apply writes overlay values into *T (dst must be *T).
	Apply ApplyFunc
}

Meta describes generated key tables and flags for one Bind target type.

type Overlay

type Overlay struct {
	// contains filtered or unexported fields
}

Overlay is a key-wise multi-source merge buffer (later Set wins).

func NewOverlay

func NewOverlay() *Overlay

NewOverlay returns an empty overlay.

func (*Overlay) Delete

func (o *Overlay) Delete(key string)

Delete removes a key from the overlay if present.

func (*Overlay) Get

func (o *Overlay) Get(key string) (Entry, bool)

Get returns the entry for key.

func (*Overlay) GetMulti

func (o *Overlay) GetMulti(key string) ([]string, bool)

GetMulti returns multi values when present; otherwise splits Raw by comma if needed.

func (*Overlay) GetString

func (o *Overlay) GetString(key string) (string, bool)

GetString returns a scalar raw string for key.

func (*Overlay) Keys

func (o *Overlay) Keys() []string

Keys returns sorted config keys.

func (*Overlay) MergeMap

func (o *Overlay) MergeMap(m map[string]string, place Place)

MergeMap merges scalar string values from m with the given place.

func (*Overlay) MergeMultiMap

func (o *Overlay) MergeMultiMap(m map[string][]string, place Place)

MergeMultiMap merges multi-value maps with the given place.

func (*Overlay) Set

func (o *Overlay) Set(key, raw string, place Place)

Set stores a scalar raw value for key from place (overwrites prior).

func (*Overlay) SetMulti

func (o *Overlay) SetMulti(key string, values []string, place Place)

SetMulti stores a multi-value for key from place.

type Place

type Place string

Place is the winning source layer for an overlay entry.

const (
	PlaceDefault Place = "default"
	PlaceFile    Place = "file_toml"
	PlaceEnv     Place = "env"
	PlaceCLI     Place = "cli"
)

Directories

Path Synopsis
Package codegen emits reflection-free configbind apply, flag, and env key tables.
Package codegen emits reflection-free configbind apply, flag, and env key tables.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL