https://github.com/alecthomas/kong-hcl
https://github.com/alecthomas/kong-hcl
Last synced: over 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/alecthomas/kong-hcl
- Owner: alecthomas
- License: mit
- Created: 2018-09-10T10:52:47.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-02-01T17:48:04.000Z (over 2 years ago)
- Last Synced: 2025-03-16T17:45:13.170Z (over 1 year ago)
- Language: Go
- Homepage:
- Size: 49.8 KB
- Stars: 8
- Watchers: 2
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: COPYING
Awesome Lists containing this project
README
# A Kong configuration loader for HCL [](http://godoc.org/github.com/alecthomas/kong-hcl) [](https://circleci.com/gh/alecthomas/kong-hcl)
This is version 1.x of kong-hcl. [Version 2](https://github.com/alecthomas/kong-hcl/tree/master/v2)
of this package uses the HCL2 library but is otherwise largely a drop-in replacement
(see the README for details).
Use it like so:
```go
var cli struct {
Config kong.ConfigFlag `help:"Load configuration."`
}
parser, err := kong.New(&cli, kong.Configuration(konghcl.Loader, "/etc/myapp/config.hcl", "~/.myapp.hcl))
```
## Mapping HCL fragments to a struct
More complex structures can be loaded directly into flag values by implementing the
`kong.MapperValue` interface, and calling `konghcl.DecodeValue`.
The value can either be a HCL(/JSON) fragment, or a path to a HCL file that will be loaded. Both
can be specified on the command-line or config file.
eg.
```go
type NestedConfig struct {
Size int
Name string
}
type ComplexConfig struct {
Key bool
Nested map[string]NestedConfig
}
func (c *ComplexConfig) Decode(ctx *kong.DecodeContext) error {
return konghcl.DecodeValue(ctx, c)
}
// ...
type Config struct {
Complex ComplexConfig
}
```
Then the following `.hcl` config fragment will be decoded into `Complex`:
```hcl
complex {
key = true
nested first {
size = 10
name = "first name"
}
nested second {
size = 12
name = "second name"
}
}
```
## Configuration layout
Configuration keys are mapped directly to flags.
Additionally, HCL block keys will be used as a hyphen-separated prefix when looking up flags.
## Example
The following Kong CLI:
```go
type CLI struct {
Debug bool
DB struct {
DSN string
Trace bool
} `embed:"" prefix:"db-"`
}
```
Maps to the following flags:
```
--debug
--db-dsn=
--db-trace
```
And can be configured via the following HCL configuration file...
```hcl
debug = true
db {
dsn = "root@/database"
trace = true
}
```