https://github.com/upfluence/cfg
https://github.com/upfluence/cfg
kind-lib lib
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/upfluence/cfg
- Owner: upfluence
- Created: 2018-09-04T21:17:38.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-01-13T13:53:28.000Z (over 1 year ago)
- Last Synced: 2025-03-28T06:51:15.613Z (about 1 year ago)
- Topics: kind-lib, lib
- Language: Go
- Size: 298 KB
- Stars: 3
- Watchers: 12
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# cfg
Convenient configuration builder. Inject data straight to your
configuration struct from various input source (env, flags, files, you
name it!)
## Example
The simplest way to use upfluence/cfg is:
```go
package main
import (
"context"
"fmt"
"os"
"github.com/upfluence/cfg"
)
type config struct {
Arg1 string `env:"ARG_1" flag:"arg1"`
Arg2 string `env:"ARG_2" flag:"arg2"`
}
func main() {
var (
c config
ctx = context.Background()
)
if err := cfg.NewDefaultConfigurator().Populate(ctx, &c); err != nil {
fmt.Fprintf(os.Stderr, "cannot populate config: %s\n", err.Error())
os.Exit(1)
}
fmt.Printf("Arg1: %s, Arg2: %s\n", c.Arg1, c.Arg2)
}
```
By default only the `env` and `flags` providers are used.
You can now provide configuration to your application through:
- `env`:
```
$ ARG_1=foo ARG_2 ./example
Arg1: foo, Arg2: bar
```
- `flags`:
```
$ ./example --arg1 foo --arg2 bar
Arg1: foo, Arg2: bar
```
- `flags:booleans`:
```
$ ./example --arg1 --no-arg2
Arg1: TRUE, Arg2: FALSE
```
## Provider
Implemented providers:
### Environment
TODO
### Flags
TODO
### JSON input
TODO
### Static
TODO
### Create your own
TODO
## Roadmap
So far the implementation is pretty minimal. There is two main
kinds of improvement.
### Field parsing
The current implementation parses:
- `string`
- all int and float types
- `bool`
- `time.Duration` using `time.ParseDuration`
- `time.Time` based on the format `2006-01-02T15:04:05`
- sub structs
- slices
- maps
- All the value or pointer to a value that implements:
- `json.Unmarshaler`
- `encoding.TextUnmarshaler`
- `interface { Parse(string) error }`
### Other provider
A few more provider are on the roadmap.
- More file types. We could include YAML and TOML file parsing provider