Documentation
¶
Overview ¶
Package confkit validates, types, redacts, and documents Go service configuration at startup.
Define a configuration contract once, then use it to load typed structs, format actionable errors, and generate .env.example or Markdown docs.
Index ¶
- Constants
- func Load[T any](contract *ConfigContract, opts ...Option) (T, error)
- func LoadEnv[T any]() (T, error)
- func WriteExample(contract *ConfigContract, writer io.Writer) error
- func WriteMarkdown(contract *ConfigContract, writer io.Writer) error
- type BoolField
- func (f *BoolField) Default(value bool) *BoolField
- func (f *BoolField) Desc(description string) *BoolField
- func (f *BoolField) Description(description string) *BoolField
- func (f *BoolField) Optional() *BoolField
- func (f *BoolField) Required() *BoolField
- func (f *BoolField) Secret() *BoolField
- func (f *BoolField) Validate(code, message string, fn func(bool) bool) *BoolField
- type ConfigContract
- type DurationField
- func (f *DurationField) Default(value time.Duration) *DurationField
- func (f *DurationField) Desc(description string) *DurationField
- func (f *DurationField) Description(description string) *DurationField
- func (f *DurationField) Max(max time.Duration) *DurationField
- func (f *DurationField) Min(min time.Duration) *DurationField
- func (f *DurationField) Optional() *DurationField
- func (f *DurationField) Required() *DurationField
- func (f *DurationField) Secret() *DurationField
- func (f *DurationField) Validate(code, message string, fn func(time.Duration) bool) *DurationField
- type EnumField
- func (f *EnumField) Default(value string) *EnumField
- func (f *EnumField) Desc(description string) *EnumField
- func (f *EnumField) Description(description string) *EnumField
- func (f *EnumField) Optional() *EnumField
- func (f *EnumField) Required() *EnumField
- func (f *EnumField) Secret() *EnumField
- func (f *EnumField) Validate(code, message string, fn func(string) bool) *EnumField
- type Error
- type Field
- type FloatField
- func (f *FloatField) Default(value float64) *FloatField
- func (f *FloatField) Desc(description string) *FloatField
- func (f *FloatField) Description(description string) *FloatField
- func (f *FloatField) Max(max float64) *FloatField
- func (f *FloatField) Min(min float64) *FloatField
- func (f *FloatField) Optional() *FloatField
- func (f *FloatField) Required() *FloatField
- func (f *FloatField) Secret() *FloatField
- func (f *FloatField) Validate(code, message string, fn func(float64) bool) *FloatField
- type IntField
- func (f *IntField) Default(value int) *IntField
- func (f *IntField) Desc(description string) *IntField
- func (f *IntField) Description(description string) *IntField
- func (f *IntField) Max(max int) *IntField
- func (f *IntField) Min(min int) *IntField
- func (f *IntField) Optional() *IntField
- func (f *IntField) Required() *IntField
- func (f *IntField) Secret() *IntField
- func (f *IntField) Validate(code, message string, fn func(int) bool) *IntField
- type Issue
- type ListField
- func (f *ListField) Default(value []string) *ListField
- func (f *ListField) Desc(description string) *ListField
- func (f *ListField) Description(description string) *ListField
- func (f *ListField) Max(max int) *ListField
- func (f *ListField) Min(min int) *ListField
- func (f *ListField) Optional() *ListField
- func (f *ListField) Required() *ListField
- func (f *ListField) Secret() *ListField
- func (f *ListField) Separator(separator string) *ListField
- func (f *ListField) Validate(code, message string, fn func([]string) bool) *ListField
- type Option
- type Source
- type StringField
- func (f *StringField) Default(value string) *StringField
- func (f *StringField) Desc(description string) *StringField
- func (f *StringField) Description(description string) *StringField
- func (f *StringField) Email() *StringField
- func (f *StringField) Hostname() *StringField
- func (f *StringField) IP() *StringField
- func (f *StringField) Max(max int) *StringField
- func (f *StringField) Min(min int) *StringField
- func (f *StringField) NonEmpty() *StringField
- func (f *StringField) Optional() *StringField
- func (f *StringField) Regex(pattern string) *StringField
- func (f *StringField) Required() *StringField
- func (f *StringField) Secret() *StringField
- func (f *StringField) URL() *StringField
- func (f *StringField) Validate(code, message string, fn func(string) bool) *StringField
Examples ¶
Constants ¶
const ( CodeRequired = "required" CodeInvalidType = "invalid_type" CodeMin = "min" CodeMax = "max" CodeRegex = "regex" CodeInvalidURL = "invalid_url" CodeInvalidEnum = "invalid_enum" CodeInvalidEmail = "invalid_email" CodeInvalidHost = "invalid_hostname" CodeInvalidIP = "invalid_ip" CodeNonEmpty = "non_empty" CodeInvalidRegex = "invalid_regex" CodeInvalidContract = "invalid_contract" CodeCustomValidation = "custom_validation" CodeDuplicateKey = "duplicate_key" CodeUnconfigured = "unconfigured_field" CodeUnknown = "unknown_field" )
Variables ¶
This section is empty.
Functions ¶
func Load ¶
func Load[T any](contract *ConfigContract, opts ...Option) (T, error)
Load reads configuration values from sources, validates them with the contract, and assigns the typed result into T.
Example ¶
package main
import (
"fmt"
conf "github.com/ahmertsengol/confkit"
)
func main() {
type Config struct {
Port int
DatabaseURL string
Env string
}
cfg, err := conf.Load[Config](
conf.Contract(
conf.Int("PORT").Default(8080).Min(1).Max(65535),
conf.String("DATABASE_URL").Required().URL(),
conf.Enum("ENV", "development", "staging", "production").Default("development"),
).Strict(),
conf.WithSource(conf.MapSource(map[string]string{
"DATABASE_URL": "https://db.example.com/app",
})),
)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%d %s %s\n", cfg.Port, cfg.DatabaseURL, cfg.Env)
}
Output: 8080 https://db.example.com/app development
func LoadEnv ¶
LoadEnv loads a struct directly from the process environment using conf tags and field types. Missing values leave the field's zero value unchanged.
func WriteExample ¶
func WriteExample(contract *ConfigContract, writer io.Writer) error
WriteExample writes a deterministic .env.example from contract metadata.
Example ¶
package main
import (
"os"
conf "github.com/ahmertsengol/confkit"
)
func main() {
contract := conf.Contract(
conf.Int("PORT").Default(8080).Desc("HTTP server port"),
conf.String("DATABASE_URL").Required().URL().Desc("Primary database connection URL"),
)
_ = conf.WriteExample(contract, os.Stdout)
}
Output: # HTTP server port PORT=8080 # Primary database connection URL DATABASE_URL=
func WriteMarkdown ¶
func WriteMarkdown(contract *ConfigContract, writer io.Writer) error
WriteMarkdown writes a Markdown table documenting the contract.
Types ¶
type BoolField ¶
type BoolField struct {
// contains filtered or unexported fields
}
BoolField validates boolean configuration values.
func (*BoolField) Description ¶
type ConfigContract ¶
type ConfigContract struct {
// contains filtered or unexported fields
}
ConfigContract describes the configuration keys, parsers, validation rules, and documentation metadata used by Load.
func Contract ¶
func Contract(fields ...Field) *ConfigContract
Contract creates a configuration contract from field builders.
func (*ConfigContract) Strict ¶ added in v0.1.1
func (c *ConfigContract) Strict() *ConfigContract
Strict rejects exported struct fields that are not represented in the contract. It is useful for service configuration where zero-value drift should be treated as a startup error.
type DurationField ¶
type DurationField struct {
// contains filtered or unexported fields
}
DurationField validates time.Duration configuration values.
func Duration ¶
func Duration(key string) *DurationField
Duration creates a time.Duration field parsed with time.ParseDuration.
func (*DurationField) Default ¶
func (f *DurationField) Default(value time.Duration) *DurationField
func (*DurationField) Desc ¶
func (f *DurationField) Desc(description string) *DurationField
func (*DurationField) Description ¶
func (f *DurationField) Description(description string) *DurationField
func (*DurationField) Max ¶
func (f *DurationField) Max(max time.Duration) *DurationField
func (*DurationField) Min ¶
func (f *DurationField) Min(min time.Duration) *DurationField
func (*DurationField) Optional ¶
func (f *DurationField) Optional() *DurationField
func (*DurationField) Required ¶
func (f *DurationField) Required() *DurationField
func (*DurationField) Secret ¶
func (f *DurationField) Secret() *DurationField
func (*DurationField) Validate ¶ added in v0.1.1
func (f *DurationField) Validate(code, message string, fn func(time.Duration) bool) *DurationField
type EnumField ¶
type EnumField struct {
// contains filtered or unexported fields
}
EnumField validates a string against a fixed set of values.
func (*EnumField) Description ¶
type Error ¶
type Error struct {
Issues []Issue
}
Error aggregates all configuration issues found in a load attempt.
type Field ¶
type Field interface {
// contains filtered or unexported methods
}
Field is implemented by all configuration field builders.
type FloatField ¶
type FloatField struct {
// contains filtered or unexported fields
}
FloatField validates float64 configuration values.
func (*FloatField) Default ¶
func (f *FloatField) Default(value float64) *FloatField
func (*FloatField) Desc ¶
func (f *FloatField) Desc(description string) *FloatField
func (*FloatField) Description ¶
func (f *FloatField) Description(description string) *FloatField
func (*FloatField) Max ¶
func (f *FloatField) Max(max float64) *FloatField
func (*FloatField) Min ¶
func (f *FloatField) Min(min float64) *FloatField
func (*FloatField) Optional ¶
func (f *FloatField) Optional() *FloatField
func (*FloatField) Required ¶
func (f *FloatField) Required() *FloatField
func (*FloatField) Secret ¶
func (f *FloatField) Secret() *FloatField
func (*FloatField) Validate ¶ added in v0.1.1
func (f *FloatField) Validate(code, message string, fn func(float64) bool) *FloatField
type IntField ¶
type IntField struct {
// contains filtered or unexported fields
}
IntField validates integer configuration values.
func (*IntField) Description ¶
type ListField ¶
type ListField struct {
// contains filtered or unexported fields
}
ListField validates comma-separated string lists.
func (*ListField) Description ¶
type Option ¶
type Option func(*options)
Option customizes Load.
func WithDotEnv ¶
WithDotEnv loads values from a dotenv file when it exists. Missing files are ignored so local .env files can be used in development without breaking production deployments.
func WithRequiredDotEnv ¶
WithRequiredDotEnv loads values from a dotenv file and returns an error when the file cannot be read.
func WithSource ¶
WithSource adds an explicit source. Explicit sources have higher precedence than .env files and the process environment.
type StringField ¶
type StringField struct {
// contains filtered or unexported fields
}
StringField validates string configuration values.
func (*StringField) Default ¶
func (f *StringField) Default(value string) *StringField
func (*StringField) Desc ¶
func (f *StringField) Desc(description string) *StringField
func (*StringField) Description ¶
func (f *StringField) Description(description string) *StringField
func (*StringField) Email ¶
func (f *StringField) Email() *StringField
func (*StringField) Hostname ¶
func (f *StringField) Hostname() *StringField
func (*StringField) IP ¶
func (f *StringField) IP() *StringField
func (*StringField) Max ¶
func (f *StringField) Max(max int) *StringField
func (*StringField) Min ¶
func (f *StringField) Min(min int) *StringField
func (*StringField) NonEmpty ¶
func (f *StringField) NonEmpty() *StringField
func (*StringField) Optional ¶
func (f *StringField) Optional() *StringField
func (*StringField) Regex ¶
func (f *StringField) Regex(pattern string) *StringField
func (*StringField) Required ¶
func (f *StringField) Required() *StringField
func (*StringField) Secret ¶
func (f *StringField) Secret() *StringField
func (*StringField) URL ¶
func (f *StringField) URL() *StringField
func (*StringField) Validate ¶ added in v0.1.1
func (f *StringField) Validate(code, message string, fn func(string) bool) *StringField