config

package
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2025 License: Apache-2.0 Imports: 8 Imported by: 35

README

go-orb/config

Package go-orb/config is a pluggable config provider for loosely coupled components.

It provides 2 main functions and some helpers.

Functions

config.Read

Read reads urls into []source.Data where source.Data is basicaly a map[string]any.

This is done over config/source.Plugins, currently there are 3 Plugins for config.source:

  • cli provides config from cli/env sources.
  • file provides config from file sources.
  • http provides config from http sources.

It's straight forward to write Plugins for config.source and we will provide more:

  • nats
  • etcd
  • consul

An example:

package main

import (
    "log"
    "net/url"

    "github.com/go-orb/go-orb/config"
    _ "github.com/go-orb/plugins/codecs/json"
    _ "github.com/go-orb/plugins/codecs/yaml"
    _ "github.com/go-orb/plugins/config/source/file"
    _ "github.com/go-orb/plugins/config/source/http"
)

func main() {
    // https://raw.githubusercontent.com/go-orb/plugins/main/config/tests/data/set1/registry1.yaml
    u1, err := url.Parse("./data/set1/registry1.yaml")
    if err != nil {
        log.Fatal(err)
    }

    u2, err := url.Parse("https://raw.githubusercontent.com/go-orb/plugins/main/config/tests/data/set1/registry2.json")
    if err != nil {
        log.Fatal(err)
    }

    datas, err := config.Read([]*url.URL{u1, u2}, []string{"app"})
    if err != nil {
        log.Fatal(err)
    }
}
config.Parse

Parse parses the config from config.Read into the given struct.

The first argument "sections" can have a alpha-numeric entry like:

[]string{"app", "config", "middleware", "5"}

When it finds that "5" it will try to parse "middleware" as slice and parses the 5th entry of that slice into the result.

Example:

// extend the config.Read example here

//
// All from here is in the plugin itself.
//
cfg := newRegistryMdnsConfig()
err := config.Parse([]string{"app", "registry"}, datas, cfg)
if err != nil {
    log.Fatal(err)
}

Helpers

config.ParseStruct

ParseStruct is a helper to make any struct with json tags a source.Data (map[string]any{} with some more fields) with sections.

Example:

func main() {
    cfg := log.NewConfig(log.WithLevel(log.LevelTrace), log.WithPlugin("slog"))

    data, err := config.ParseStruct([]string{"com", "example", "app", "registry", "logger"}, &cfg)
    if err != nil {
        return l, nil //nolint:nilerr
    }

    datas := []source.Data{data}
}
config.HasKey

HasKey returns a boolean which indidcates if the given sections and key exists in the configs.

HasKey has also support for alpha-numeric keys, same as Parse.

Example:

func main() {
    test := config.HasKey([]string{"com", "example", "app", "registry", "logger"}, "plugin", configs)
}
config.Dump

Dump is a helper function to dump configDatas to the console.

Authors

License

go-orb is Apache 2.0 licensed and is based on go-micro.

Documentation

Overview

Package config provides config handling for go-micro.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUnknownPlugin happens when there's no config factory for the given plugin.
	ErrUnknownPlugin = errors.New("unknown config given. Did you import the config plugin?")

	// ErrNotExistent happens when a config key is not existent.
	ErrNotExistent = errors.New("no such config key")

	// ErrTypesDontMatch happens when types don't match during Get[T]().
	ErrTypesDontMatch = errors.New("config key requested type and actual type don't match")

	// ErrUnknownScheme happens when you didn't import the plugin for the scheme or the scheme is unknown.
	ErrUnknownScheme = errors.New("unknown config source scheme. Did you register the config source plugin for your scheme?")

	// ErrFileNotFound happens when theres no file.
	ErrFileNotFound = errors.New("file not found")

	// ErrCodecNotFound happens when the required codec is not found.
	ErrCodecNotFound = errors.New("marshaler for codec not found. Did you import the codec plugin for your file type?")
)

Functions

func Dump added in v0.1.0

func Dump(configs types.ConfigData) error

Dump is a helper function to dump configDatas to the console.

func HasKey added in v0.1.0

func HasKey[T any](sections []string, key string, configs types.ConfigData) bool

HasKey returns a boolean which indidcates if the given sections and key exists in the configs.

func Parse

func Parse(sections []string, configs types.ConfigData, target any) error

Parse parses the config from config.Read into the given struct. Param target should be a pointer to the config to parse into.

func ParseStruct added in v0.1.0

func ParseStruct[TParse any](sections []string, toParse TParse) (source.Data, error)

ParseStruct is a helper to make any struct with `json` tags a source.Data (map[string]any{} with some more fields) with sections.

func Read

func Read(urls []*url.URL, prependSections []string) (types.ConfigData, error)

Read reads urls into []Data where Data is map[string]any.

By default it will error out if any of these config URLs fail, but you can ignore errors for a single url by adding "?ignore_error=true".

prependSections is for url's that don't support sections (cli for example), their result will be prepended, also you can add sections to a single url with "?add_section=true".

func SingleGet added in v0.1.0

func SingleGet[T any](data map[string]any, key string, def T) (T, error)

SingleGet returns either the value of "key" in "data" or the default value "def". If types don't match it returns ErrTypesDontMatch. If key hasn't been found it returns ErrNotExistent as well as the default value "def".

It supports the following datatypes:

  • any non-container (string/float64/uvm.)
  • []string slice
  • []any slice
  • []map[string]any

Types

This section is empty.

Directories

Path Synopsis
Package source provides a base for all config sources.
Package source provides a base for all config sources.
cli
Package cli provides the CLI config component of go-micro.
Package cli provides the CLI config component of go-micro.

Jump to

Keyboard shortcuts

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