localhots.xyz confection / master
master

Tree @master (Download .tar.gz)

Confection

Confection is a configuration manager plugin for Go projects.

This project is outdated

Please use Secondly instead.

Configuration

First you need to add tags to fields of the config struct.

  • json — required for proper serialization
  • title — human readable field name (optional)
  • attrs — field attributes: required, readonly, ignored; separated by comma
  • options — list of supported values, separated by comma

Required attributes will block manager.RequireConfig() call until field gets a value

Ignored attributes are not displayed.

Readonly attributes are displayed but disabled.

You also need to pass an unmarshalling function as shown below.

package main

import (
    "encoding/json"
    "flag"
    "fmt"

    "github.com/localhots/confection"
)

type (
    Config struct {
        AppName     string `json:"app_name" attrs:"required" title:"Application Name"`
        BuildNumber int    `json:"build_number" attrs:"readonly" title:"Build Number"`
    }
)

func init() {
    confection.SetupFlags()
    flag.Parse()
}

func main() {
    conf := Config{}
    manager := confection.New(conf, func(b []byte) interface{} {
        var newConf Config
        if err := json.Unmarshal(b, &newConf); err != nil {
            panic(err)
        }
        return newConf
    })
    manager.StartServer()
    manager.RequireConfig()

    fmt.Println("Ready to work!")
}

Full example

Demo Screenshot