config

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const DEFAULT_MAX_REFERENCE_DEPTH = 10

Sane defaults

View Source
const DEFAULT_REFERENCE_DELIMITER_CLOSER = '%'
View Source
const DEFAULT_REFERENCE_DELIMITER_OPENER = '%'

Variables

This section is empty.

Functions

func NewConfigItem

func NewConfigItem(selector string) *configItem

Types

type CaptureFunc

type CaptureFunc func(dataValue data.DataValueIfc) error

type Config

type Config struct {
	*data.DataValue
	// contains filtered or unexported fields
}

func FromDataValue

func FromDataValue(dataValue *data.DataValue) *Config

Create instance from DataValue (which can have its own factories from various data sources, like JSON, YAML, XML etc., string/stream/file/environment, etc)

func NewConfig

func NewConfig() *Config

func (*Config) CloneConfig

func (r *Config) CloneConfig() *Config

func (*Config) Dereference

func (r *Config) Dereference(referenceConfigs ...ConfigIfc) int

Dereference values with %reference% selectors against referenceConfig(s); returns num substitutions This is a multple-pass iteration dereference; if subs comes out > 0 then an additional pass may be called for to see if more subs are possible (think of subtitutions that themselves contain additional keys needing deferencing), so we make another pass up to a configured max depth. TODO: Technically max passes is not "depth" since this is non-recursive; rename to "derefPassMax" TODO: It doesn't seem like the return value int actually provides any utility value. Maybe just return self and set immutable - should only need to call this once. Perform any mutations/merges needed before Dereferencing, and then it's baked, no more changes!

func (*Config) DereferenceString

func (r *Config) DereferenceString(str string) (*string, int)

Dereference any %selector% references our keys in supplied string; returns dereferenced string and num substitutions

func (*Config) MergeConfig

func (r *Config) MergeConfig(config ConfigIfc) *Config

Merge properties of passed config into our own embedded data

func (*Config) SetDelimiters

func (r *Config) SetDelimiters(opener, closer byte) *Config

func (*Config) SetMaxDepth

func (r *Config) SetMaxDepth(max int) *Config

type ConfigIfc

type ConfigIfc interface {
	data.DataValueIfc

	SetMaxDepth(max int) *Config
	SetDelimiters(opener, closer byte) *Config

	DereferenceString(str string) (*string, int)
	Dereference(referenceConfigs ...ConfigIfc) int
	MergeConfig(config ConfigIfc) *Config
	CloneConfig() *Config
}

type ConfigItemIfc

type ConfigItemIfc interface {
	GetSelector() string
	SetRequired() *configItem
	IsRequired() bool

	CanCapture() bool
	CaptureWith(captureFunc CaptureFunc) *configItem
	Capture(dataValue data.DataValueIfc) error

	CanValidate() bool
	ValidateWith(validateFunc ValidateFunc) *configItem
	Validate(dataValue data.DataValueIfc) error

	SetDefault(dataValue data.DataValueIfc) *configItem
}

type Configurable

type Configurable struct {
	*startable.Startable
	// contains filtered or unexported fields
}

Exported to support embedding

func NewConfigurable

func NewConfigurable(configItems ...ConfigItemIfc) *Configurable

func (*Configurable) Configure

func (r *Configurable) Configure(config ConfigIfc) error

Just capture the provided configuration by default Overrides should call this parent, and return error if this fails or for any validation problems

func (*Configurable) DeclareConfigItems

func (r *Configurable) DeclareConfigItems(configItems ...ConfigItemIfc) *Configurable

func (*Configurable) GetConfig

func (r *Configurable) GetConfig() ConfigIfc

func (*Configurable) GetMissingConfigs

func (r *Configurable) GetMissingConfigs() []string

Verify that all required Configs are captured

func (*Configurable) HasMissingConfigs

func (r *Configurable) HasMissingConfigs() bool

MissingConfigs as a bool!

func (*Configurable) Start

func (r *Configurable) Start() error

type ConfigurableIfc

type ConfigurableIfc interface {
	// Embedded interface(s)
	startable.StartableIfc

	// Our own interface
	DeclareConfigItems(configItems ...ConfigItemIfc) *Configurable
	Configure(config ConfigIfc) error
	GetMissingConfigs() []string
	HasMissingConfigs() bool
	GetConfig() ConfigIfc
}

Any type that implements ConfigurableIfc should be ready to receive configuration data one time as so:

type ValidateFunc

type ValidateFunc func(dataValue data.DataValueIfc) error

Jump to

Keyboard shortcuts

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