config

package
v0.37.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2026 License: MIT Imports: 14 Imported by: 1

Documentation

Overview

Package config provides application configuration types and helpers.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bind

func Bind[T any](c *T, prefix string, v *viper.Viper) *T

Bind configuration section if it implements Binder interface.

Types

type CORS

type CORS struct {
	Origins []string `mapstructure:"origins" validate:"dive,required,url"`
}

CORS is a configuration for CORS middleware.

func (*CORS) Bind

func (c *CORS) Bind(prefix string, v *viper.Viper)

Bind CORS configuration section.

func (*CORS) Validate

func (c *CORS) Validate(valid *validation.Validate) error

Validate CORS configuration section.

type Configurable

type Configurable interface {
	ServerCore() *Configuration
}

Configurable is an interface that can be implemented by extended configuration.

type Configuration

type Configuration struct {
	*config.Configuration `mapstructure:",squash"`

	// Server configuration section.
	Server *Server `mapstructure:"server"`
	// CORS configuration section.
	CORS *CORS `mapstructure:"cors"`
	// Paging configuration section.
	Paging *Paging `mapstructure:"paging"`
	// Proxy configuration section.
	Proxy *Proxy `mapstructure:"proxy"`
	// Metrics configuration section.
	Metrics *Metrics `mapstructure:"metrics"`
	// Healthz configuration section.
	Healthz *Healthz `mapstructure:"healthz"`
	// RateLimit configuration section.
	RateLimit *RateLimit `mapstructure:"rate_limit"`
	// HTTPClient configuration section.
	HTTPClient *http.Configuration `mapstructure:"http_client"`
}

Configuration for the application.

func New

func New() *Configuration

New returns a new configuration.

func (*Configuration) Bind

func (c *Configuration) Bind(_ string, v *viper.Viper)

Bind binds configuration section to viper.

func (*Configuration) BindCmd

func (c *Configuration) BindCmd(cmd *cobra.Command, v *viper.Viper)

BindCmd adds configuration bindings from command arguments.

func (*Configuration) ServerCore

func (c *Configuration) ServerCore() *Configuration

ServerCore returns the web core configuration.

func (*Configuration) Validate

func (c *Configuration) Validate(validate *validation.Validate) error

Validate the configuration.

type Healthz added in v0.31.0

type Healthz struct {
	Enabled bool     `mapstructure:"enabled"`
	Address []string `mapstructure:"address" validate:"dive,required,ip_addr|cidr|eq=*"`
}

Healthz is the health check endpoint configuration.

func (*Healthz) Bind added in v0.31.0

func (c *Healthz) Bind(prefix string, v *viper.Viper)

Bind Healthz configuration section.

func (*Healthz) Validate added in v0.31.0

func (c *Healthz) Validate(valid *validation.Validate) error

Validate Healthz configuration section.

type Metrics

type Metrics struct {
	Enabled   bool     `mapstructure:"enabled"`
	Path      string   `mapstructure:"path"`
	Address   []string `mapstructure:"address" validate:"dive,required,ip_addr|cidr|eq=*"`
	SkipPaths []string `mapstructure:"skip_paths"`
}

Metrics is the Prometheus metrics endpoint configuration.

func (*Metrics) Bind

func (c *Metrics) Bind(prefix string, v *viper.Viper)

Bind Metrics configuration section.

func (*Metrics) Validate

func (c *Metrics) Validate(valid *validation.Validate) error

Validate Metrics configuration section.

type Paging added in v0.19.0

type Paging struct {
	// DefaultPageSize represents the default number of items per page.
	DefaultPageSize int `mapstructure:"default_page_size" validate:"required,min=1"`
	// MaxPageSize represents the default maximum number of items per page.
	MaxPageSize int `mapstructure:"max_page_size" validate:"required,min=1"`
}

Paging is the pagination configuration.

func (*Paging) Bind added in v0.19.0

func (c *Paging) Bind(prefix string, v *viper.Viper)

Bind Paging configuration section.

func (*Paging) Validate added in v0.19.0

func (c *Paging) Validate(valid *validation.Validate) error

Validate Paging configuration section.

type Proxy

type Proxy struct {
	Address        []string `mapstructure:"address" validate:"dive,required,ip_addr|cidr|eq=*"`
	Limit          int      `mapstructure:"limit" validate:"min=0,max=10"`
	TrustedHeaders []string `mapstructure:"trusted_headers"`
}

Proxy is a configuration for trusted proxies.

func (*Proxy) Bind

func (c *Proxy) Bind(prefix string, v *viper.Viper)

Bind Proxy configuration section.

func (*Proxy) Validate

func (c *Proxy) Validate(valid *validation.Validate) error

Validate Proxy configuration section.

type RateLimit added in v0.33.0

type RateLimit struct {
	Enabled bool `mapstructure:"enabled"`

	Strategy string `mapstructure:"strategy" validate:"required,oneof=fixed-window token-bucket"`
	// Fixed window strategy.
	Limit  int           `mapstructure:"limit" validate:"required_if=Strategy fixed-window,omitempty,gt=0"`
	Window time.Duration `mapstructure:"window" validate:"required_if=Strategy fixed-window,omitempty,gt=0"`
	// Token bucket strategy.
	Rate  float64 `mapstructure:"rate" validate:"required_if=Strategy token-bucket,omitempty,gt=0"`
	Burst int     `mapstructure:"burst" validate:"required_if=Strategy token-bucket,omitempty,gt=0"`

	WaitLimit time.Duration `mapstructure:"wait_limit" validate:"omitempty,min=0"`
}

RateLimit configuration for routes.

func (*RateLimit) Bind added in v0.33.0

func (c *RateLimit) Bind(prefix string, v *viper.Viper)

Bind rate limiter configuration section.

func (*RateLimit) New added in v0.33.0

func (c *RateLimit) New(cache *cache.Cache, name string, opts ...ratelimit.LimiterOption) (ratelimit.Limiter, error)

New creates a limiter from the configuration. Additional options (for example ratelimit.Instrumenter) are appended after the configuration-derived ones.

func (*RateLimit) Validate added in v0.33.0

func (c *RateLimit) Validate(valid *validation.Validate) error

Validate rate limiter configuration section.

type Server

type Server struct {
	HTTP  *ServerHTTP  `mapstructure:"http"`
	HTTPS *ServerHTTPS `mapstructure:"https"`
	Path  string       `mapstructure:"path"`

	// Maximum duration for reading the full request including body.
	ReadTimeout time.Duration `mapstructure:"read_timeout" validate:"omitempty,min=0"`
	// Maximum duration for writing the response.
	WriteTimeout time.Duration `mapstructure:"write_timeout" validate:"omitempty,min=0"`
	// Maximum duration to wait for the next request on a keep-alive connection.
	IdleTimeout time.Duration `mapstructure:"idle_timeout" validate:"omitempty,min=0"`
	// Maximum request body size.
	MaxRequestBodySize int `mapstructure:"max_request_body_size" validate:"omitempty,min=0"`
	// Maximum duration to wait for active connections to finish on shutdown.
	ShutdownTimeout time.Duration `mapstructure:"shutdown_timeout" validate:"omitempty,min=0"`
}

Server configuration section.

func (*Server) Bind

func (s *Server) Bind(prefix string, v *viper.Viper)

Bind server configuration section.

func (*Server) Validate

func (s *Server) Validate(valid *validation.Validate) error

Validate server configuration section.

type ServerHTTP

type ServerHTTP struct {
	Enabled bool   `mapstructure:"enabled"`
	Address string `mapstructure:"address" validate:"ip_addr|hostname|fqdn"`
	Port    int    `mapstructure:"port" validate:"required,min=1,max=65535"`
}

ServerHTTP is a HTTP server configuration.

func (*ServerHTTP) Bind

func (s *ServerHTTP) Bind(prefix string, v *viper.Viper)

Bind server configuration section.

func (*ServerHTTP) Validate

func (s *ServerHTTP) Validate(valid *validation.Validate) error

Validate server configuration section.

type ServerHTTPS

type ServerHTTPS struct {
	Enabled            bool   `mapstructure:"enabled"`
	Address            string `mapstructure:"address" validate:"ip_addr|hostname|fqdn"`
	Port               int    `mapstructure:"port" validate:"required,min=1,max=65535"`
	CertificatePEMFile string `mapstructure:"certificate_pem_file" validate:"omitempty,file"`
}

ServerHTTPS is a HTTPS server configuration.

func (*ServerHTTPS) Bind

func (s *ServerHTTPS) Bind(prefix string, v *viper.Viper)

Bind server configuration section.

func (*ServerHTTPS) Validate

func (s *ServerHTTPS) Validate(valid *validation.Validate) error

Validate server configuration section.

Jump to

Keyboard shortcuts

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