From 0daebc80804b949bd46c4ed9280f2dd63afeaa30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Feb 2023 14:59:12 +0300 Subject: [PATCH] chore(deps): bump github.com/obalunenko/getenv from 1.3.0 to 1.4.2 (#241) --- go.mod | 2 +- go.sum | 4 +- vendor/github.com/obalunenko/getenv/README.md | 101 +++++++++++++++- vendor/github.com/obalunenko/getenv/getenv.go | 21 +++- .../obalunenko/getenv/internal/constraint.go | 2 +- .../obalunenko/getenv/internal/iface.go | 110 ++++++++++++++---- .../obalunenko/getenv/internal/parsers.go | 100 ++++++++++++++++ vendor/modules.txt | 2 +- 8 files changed, 311 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index 85c5f205..1c5ef784 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/briandowns/spinner v1.21.0 github.com/manifoldco/promptui v0.9.0 - github.com/obalunenko/getenv v1.3.0 + github.com/obalunenko/getenv v1.4.2 github.com/obalunenko/logger v0.5.1 github.com/obalunenko/version v1.1.0 github.com/stretchr/testify v1.8.1 diff --git a/go.sum b/go.sum index 7e1cfba6..5cdd7551 100644 --- a/go.sum +++ b/go.sum @@ -25,8 +25,8 @@ github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/obalunenko/getenv v1.3.0 h1:gBH8OYI2fw+Rfyd8aywMnqRLRNxhI4bLztAZLuOjMVU= -github.com/obalunenko/getenv v1.3.0/go.mod h1:trfsd8x+Ulqtw8DHKTmL1DdM9wgUd8IvOUgo22GLn3U= +github.com/obalunenko/getenv v1.4.2 h1:m/Cer+5/Di+kbpNhtmZMcYXOquqqCjlgtvSc4X89e/M= +github.com/obalunenko/getenv v1.4.2/go.mod h1:trfsd8x+Ulqtw8DHKTmL1DdM9wgUd8IvOUgo22GLn3U= github.com/obalunenko/logger v0.5.1 h1:49DIEwy4sBvRzM/OtD/m7zITi5L3S5DtSYZ/WoUrnno= github.com/obalunenko/logger v0.5.1/go.mod h1:/GnmNcmEV7tAL9StHrs3nDkXAK+TEvChoNY+YYRZww4= github.com/obalunenko/version v1.1.0 h1:yVua7OHnK3+MJpendeMmAlfzVmq7R1h8MO3Ufz7HEec= diff --git a/vendor/github.com/obalunenko/getenv/README.md b/vendor/github.com/obalunenko/getenv/README.md index 708db0c9..e5c9c0c3 100644 --- a/vendor/github.com/obalunenko/getenv/README.md +++ b/vendor/github.com/obalunenko/getenv/README.md @@ -1,17 +1,17 @@ -![coverbadger-tag-do-not-edit](https://img.shields.io/badge/coverage-100%25-brightgreen?longCache=true&style=flat) - ![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/obalunenko/getenv) [![Go Reference](https://pkg.go.dev/badge/github.com/obalunenko/getenv.svg)](https://pkg.go.dev/github.com/obalunenko/getenv) [![Go Report Card](https://goreportcard.com/badge/github.com/obalunenko/getenv)](https://goreportcard.com/report/github.com/obalunenko/getenv) [![codecov](https://codecov.io/gh/obalunenko/getenv/branch/master/graph/badge.svg)](https://codecov.io/gh/obalunenko/getenv) +![coverbadger-tag-do-not-edit](https://img.shields.io/badge/coverage-96.48%25-brightgreen?longCache=true&style=flat) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=obalunenko_getenv&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=obalunenko_getenv) # getenv Package getenv provides functionality for loading environment variables and parse them into go builtin types. -## Types supported: +Types supported: +```text - string - []string - int @@ -20,8 +20,103 @@ Package getenv provides functionality for loading environment variables and pars - []int64 - uint64 - []uint64 +- uint +- []uint +- uint32 +- []uint32 - float64 - []float64 - time.Time - time.Duration - bool +``` + +## Examples + +### EnvOrDefault + +EnvOrDefault retrieves the value of the environment variable named +by the key. +If variable not set or value is empty - defaultVal will be returned. + +```golang +package main + +import ( + "fmt" + "os" + "time" + + "github.com/obalunenko/getenv" + "github.com/obalunenko/getenv/option" +) + +func main() { + key := "GH_GETENV_TEST" + + defer func() { + if err := os.Unsetenv("GH_GETENV_TEST"); err != nil { + panic(err) + } + }() + + var val any + + // string + if err := os.Setenv(key, "golly"); err != nil { + panic(err) + } + + val = getenv.EnvOrDefault(key, "golly") + fmt.Printf("[%T]: %v\n", val, val) + + // int + if err := os.Setenv(key, "123"); err != nil { + panic(err) + } + + val = getenv.EnvOrDefault(key, -99) + fmt.Printf("[%T]: %v\n", val, val) + + // time.Time + if err := os.Setenv(key, "2022-01-20"); err != nil { + panic(err) + } + + val = getenv.EnvOrDefault(key, + time.Date(1992, 12, 1, 0, 0, 0, 0, time.UTC), + option.WithTimeLayout("2006-01-02"), + ) + fmt.Printf("[%T]: %v\n", val, val) + + // []float64 + if err := os.Setenv(key, "26.89,0.67"); err != nil { + panic(err) + } + + val = getenv.EnvOrDefault(key, []float64{-99}, + option.WithSeparator(","), + ) + fmt.Printf("[%T]: %v\n", val, val) + + // time.Duration + if err := os.Setenv(key, "2h35m"); err != nil { + panic(err) + } + + val = getenv.EnvOrDefault(key, time.Second) + fmt.Printf("[%T]: %v\n", val, val) + +} + +``` + + Output: + +``` +[string]: golly +[int]: 123 +[time.Time]: 2022-01-20 00:00:00 +0000 UTC +[[]float64]: [26.89 0.67] +[time.Duration]: 2h35m0s +``` diff --git a/vendor/github.com/obalunenko/getenv/getenv.go b/vendor/github.com/obalunenko/getenv/getenv.go index bff872aa..26cd49ba 100644 --- a/vendor/github.com/obalunenko/getenv/getenv.go +++ b/vendor/github.com/obalunenko/getenv/getenv.go @@ -1,4 +1,23 @@ -// Package getenv provides functionality for loading environment variables. +// Package getenv provides functionality for loading environment variables and parse them into go builtin types. +// +// Types supported: +// - string +// - []string +// - int +// - []int +// - int64 +// - []int64 +// - uint64 +// - []uint64 +// - uint +// - []uint +// - uint32 +// - []uint32 +// - float64 +// - []float64 +// - time.Time +// - time.Duration +// - bool package getenv import ( diff --git a/vendor/github.com/obalunenko/getenv/internal/constraint.go b/vendor/github.com/obalunenko/getenv/internal/constraint.go index e777f369..5c45c189 100644 --- a/vendor/github.com/obalunenko/getenv/internal/constraint.go +++ b/vendor/github.com/obalunenko/getenv/internal/constraint.go @@ -16,7 +16,7 @@ type String interface { // Int is a constraint for integer and slice of integers. type Int interface { - int | []int | int64 | []int64 | uint64 | []uint64 + int | []int | int64 | []int64 | uint64 | []uint64 | uint | []uint | []uint32 | uint32 } // Float is a constraint for floats and slice of floats. diff --git a/vendor/github.com/obalunenko/getenv/internal/iface.go b/vendor/github.com/obalunenko/getenv/internal/iface.go index 34737451..45fa6252 100644 --- a/vendor/github.com/obalunenko/getenv/internal/iface.go +++ b/vendor/github.com/obalunenko/getenv/internal/iface.go @@ -10,38 +10,68 @@ import ( func NewEnvParser(v any) EnvParser { var p EnvParser - switch i := v.(type) { + switch t := v.(type) { + case string, []string: + p = newStringParser(t) + case int, []int, int64, []int64, uint64, []uint64, uint, []uint, uint32, []uint32: + p = newIntParser(t) + case bool: + p = boolParser(t) + case float64: + p = float64Parser(t) + case []float64: + p = float64SliceParser(t) + case time.Time: + p = timeParser(t) + case time.Duration: + p = durationParser(t) + default: + p = nil + } + + if p == nil { + panic(fmt.Sprintf("unsupported type :%T", v)) + } + + return p +} + +func newStringParser(v any) EnvParser { + switch t := v.(type) { case string: - p = stringParser(v.(string)) + return stringParser(t) case []string: - p = stringSliceParser(v.([]string)) + return stringSliceParser(t) + default: + return nil + } +} + +func newIntParser(v any) EnvParser { + switch t := v.(type) { case int: - p = intParser(v.(int)) + return intParser(t) case []int: - p = intSliceParser(v.([]int)) - case bool: - p = boolParser(v.(bool)) + return intSliceParser(t) case int64: - p = int64Parser(v.(int64)) + return int64Parser(t) case []int64: - p = int64SliceParser(v.([]int64)) - case float64: - p = float64Parser(v.(float64)) - case []float64: - p = float64SliceParser(v.([]float64)) + return int64SliceParser(t) case uint64: - p = uint64Parser(v.(uint64)) + return uint64Parser(t) case []uint64: - p = uint64SliceParser(v.([]uint64)) - case time.Time: - p = timeParser(v.(time.Time)) - case time.Duration: - p = durationParser(v.(time.Duration)) + return uint64SliceParser(t) + case uint: + return uintParser(t) + case []uint: + return uintSliceParser(t) + case []uint32: + return uint32SliceParser(t) + case uint32: + return uint32Parser(t) default: - panic(fmt.Sprintf("unsupported type :%T", i)) + return nil } - - return p } // EnvParser interface for parsing environment variables. @@ -164,3 +194,39 @@ func (i uint64SliceParser) ParseEnv(key string, defaltVal any, options Parameter return val } + +type uintParser uint + +func (d uintParser) ParseEnv(key string, defaltVal any, _ Parameters) any { + val := uintOrDefault(key, defaltVal.(uint)) + + return val +} + +type uintSliceParser []uint + +func (i uintSliceParser) ParseEnv(key string, defaltVal any, options Parameters) any { + sep := options.Separator + + val := uintSliceOrDefault(key, defaltVal.([]uint), sep) + + return val +} + +type uint32SliceParser []uint32 + +func (i uint32SliceParser) ParseEnv(key string, defaltVal any, options Parameters) any { + sep := options.Separator + + val := uint32SliceOrDefault(key, defaltVal.([]uint32), sep) + + return val +} + +type uint32Parser uint + +func (d uint32Parser) ParseEnv(key string, defaltVal any, _ Parameters) any { + val := uint32OrDefault(key, defaltVal.(uint32)) + + return val +} diff --git a/vendor/github.com/obalunenko/getenv/internal/parsers.go b/vendor/github.com/obalunenko/getenv/internal/parsers.go index ff165f9c..9467f7d7 100644 --- a/vendor/github.com/obalunenko/getenv/internal/parsers.go +++ b/vendor/github.com/obalunenko/getenv/internal/parsers.go @@ -275,3 +275,103 @@ func uint64SliceOrDefault(key string, defaultVal []uint64, sep string) []uint64 return val } + +// uintOrDefault retrieves the unt64 value of the environment variable named +// by the key. +// If variable not set or value is empty - defaultVal will be returned. +func uintOrDefault(key string, defaultVal uint) uint { + env := stringOrDefault(key, "") + if env == "" { + return defaultVal + } + + const ( + base = 10 + bitsize = 32 + ) + + val, err := strconv.ParseUint(env, base, bitsize) + if err != nil { + return defaultVal + } + + return uint(val) +} + +// uintSliceOrDefault retrieves the uint slice value of the environment variable named +// by the key and separated by sep. +// If variable not set or value is empty - defaultVal will be returned. +func uintSliceOrDefault(key string, defaultVal []uint, sep string) []uint { + valraw := stringSliceOrDefault(key, nil, sep) + if valraw == nil { + return defaultVal + } + + val := make([]uint, 0, len(valraw)) + + const ( + base = 10 + bitsize = 32 + ) + + for _, s := range valraw { + v, err := strconv.ParseUint(s, base, bitsize) + if err != nil { + return defaultVal + } + + val = append(val, uint(v)) + } + + return val +} + +// uint32SliceOrDefault retrieves the uint32 slice value of the environment variable named +// by the key and separated by sep. +// If variable not set or value is empty - defaultVal will be returned. +func uint32SliceOrDefault(key string, defaultVal []uint32, sep string) []uint32 { + valraw := stringSliceOrDefault(key, nil, sep) + if valraw == nil { + return defaultVal + } + + val := make([]uint32, 0, len(valraw)) + + const ( + base = 10 + bitsize = 32 + ) + + for _, s := range valraw { + v, err := strconv.ParseUint(s, base, bitsize) + if err != nil { + return defaultVal + } + + val = append(val, uint32(v)) + } + + return val +} + +// uint32OrDefault retrieves the unt32 value of the environment variable named +// by the key. +// If variable not set or value is empty - defaultVal will be returned. +func uint32OrDefault(key string, defaultVal uint32) uint32 { + env := stringOrDefault(key, "") + if env == "" { + return defaultVal + } + + const ( + base = 10 + bitsize = 32 + ) + + val, err := strconv.ParseUint(env, base, bitsize) + if err != nil { + return defaultVal + } + + return uint32(val) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 2e079592..a0c500e0 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -33,7 +33,7 @@ github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.8 ## explicit github.com/mattn/go-isatty -# github.com/obalunenko/getenv v1.3.0 +# github.com/obalunenko/getenv v1.4.2 ## explicit; go 1.20 github.com/obalunenko/getenv github.com/obalunenko/getenv/internal