https://github.com/zxdev/env
a simple struct parser for configuation with associated bootstap service managers
https://github.com/zxdev/env
bootstrap configuration env environment struct
Last synced: 6 months ago
JSON representation
a simple struct parser for configuation with associated bootstap service managers
- Host: GitHub
- URL: https://github.com/zxdev/env
- Owner: zxdev
- License: other
- Created: 2024-07-11T05:15:23.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-02-28T11:45:40.000Z (over 1 year ago)
- Last Synced: 2025-02-28T18:14:17.088Z (over 1 year ago)
- Topics: bootstrap, configuration, env, environment, struct
- Language: Go
- Homepage:
- Size: 60.5 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# env package
Designed to provide simple and useful tooling to popoulate simple structs and provide managagement and helpful services utilizing struct tags instead of package like flag or third-party solutions.
```golang
type params struct {
Action string `env:"A,require,order" help:"a name to use"`
Secret string `env:"hidden" help:"a secret"`
Flag bool `default:"on" help:"a flag setting"`
Number int `default:"5" help:"a number"`
timestamp int64 // not parsed or reported in Summary
}
func main() {
var param params
paths := env.NewEnv(¶m)
}
```
Set struct params and populate by calling ```env.NewEnv(¶m)``` to parse and populate the struct as shown.
* Any default value is overloaded by system environment that is in turn overloaded by any command line values.
Supported types in env.Parser are limited to ```string```, ```bool```, and ```int```.
* Bool understands and accepts: ```on```, ```yes```, ```ok```, ```true```, and ```1``` and their associated negative counter parts.
* Everything you want can be derived from these three basic types, including arrays and maps that utilize your own encoding and decoding.
* Array can be passed or set as ```one,two,three``` and split by on comman, simarly a map can be encode as ```k1:v1,k1:v2``` and decoded by splitting on comma and then each set split on the colon.
---
Struct tag element supported and descriptions.
* ```env```: alias,order,require,environ,hidden
* alias support can be short form of the switch ```-A``` instead of ```-action```
* order makes it switchless and populated based on os.Args location index
* require will cause hard stop when not defaulted or provided
* environ sets all struct elements in the system envronment
* hidden redacts the struct value in the summary report
* ```default```: string, bool, int values
* ```help```: description
Automatic ```-help``` support reports basic information, the struct field name, the alias is any, the env:tag in use, any default value and the help description.
```
% go run example/main.go -help
development
--------------------
version
build
action A [or ] default: an action to do
secret [ *] default: a secret
flag [ ] default:on a flag setting
number [ ] default:5 a number
```
A summary log reports the struct values and integrates with other env system. If more than one param is populated by env.NewENV(¶m,&server), each will appear as seperate sets in the order provided in the log summary output.
```
% go run example/main.go run
2024/07/10 21:19:54 |----------------------------------------|
2024/07/10 21:19:54 | MAIN ::::::::::::::::::::::: event log |
2024/07/10 21:19:54 |-----//o--------------------------------|
2024/07/10 21:19:54 version
2024/07/10 21:19:54 build
2024/07/10 21:19:54 pid 65812
2024/07/10 21:19:54 |-----//o--------------------------------|
2024/07/10 21:19:54 action | run
2024/07/10 21:19:54 secret |
2024/07/10 21:19:54 flag | true
2024/07/10 21:19:54 number | 5
2024/07/10 21:19:54 |----------------------------------------|
2024/07/10 21:19:54 _dev/srv
2024/07/10 21:19:54 sample: start
2024/07/10 21:19:55 main: bootstrap complete
2024/07/10 21:19:58 main: interrupt shutdown
2024/07/10 21:19:58 sample: stop
2024/07/10 21:19:58 main: shutdown initiated
2024/07/10 21:19:58 |----------------------------------------|
2024/07/10 21:19:58 main: bye
2024/07/10 21:19:58 |----------------------------------------|
```
* env.NewEnv - parse and populate a param struct
* env.Parser - parser used with NewEnv methods
* env.Dir - ensure a directory exists
* env.Expire - expiration file manager with graceful interface support
* env.Graceful - graceful startup/shutdown controller
* env.Lock - process file lock (simple in use detection)
* env.Persist - persist and resume with data on disk
* env.Shutdown - shutdown, not necessary with graceful controller