8000 refactor: Implement uint generic parser (#107) · obalunenko/getenv@f05063b · GitHub
[go: up one dir, main page]

Skip to content

Commit f05063b

Browse files
authored
refactor: Implement uint generic parser (#107)
* ci: Disable linter depguard cause of false-positive results * refactor: Implement uint generic parser
1 parent 9fcb283 commit f05063b

File tree

4 files changed

+50
-135
lines changed

4 files changed

+50
-135
lines changed

.golangci.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
11
linters-settings:
2-
depguard:
3-
list-type: blacklist
4-
packages:
5-
# logging is allowed only by logutils.Log, logrus
6-
# is allowed to use only in logutils package
7-
- github.com/sirupsen/logrus
8-
packages-with-error-message:
9-
- github.com/sirupsen/logrus: "logging is allowed only by github.com/obalunenko/logger"
102
dupl:
113
threshold: 100
124
funlen:
@@ -56,7 +48,6 @@ linters:
5648
disable-all: true
5749
enable:
5850
- bodyclose
59-
- depguard
6051
- dogsled
6152
- dupl
6253
- errcheck

internal/iface.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ func (d durationParser) ParseEnv(key string, defaltVal any, _ Parameters) any {
398398
type uint64Parser uint64
399399

400400
func (d uint64Parser) ParseEnv(key string, defaltVal any, _ Parameters) any {
401-
val := uint64OrDefault(key, defaltVal.(uint64))
401+
val := uintOrDefaultGen(key, defaltVal.(uint64))
402402

403403
return val
404404
}
@@ -416,15 +416,15 @@ func (i uint64SliceParser) ParseEnv(key string, defaltVal any, options Parameter
416416
type uint8Parser uint
417417

418418
func (d uint8Parser) ParseEnv(key string, defaltVal any, _ Parameters) any {
419-
val := uint8OrDefault(key, defaltVal.(uint8))
419+
val := uintOrDefaultGen(key, defaltVal.(uint8))
420420

421421
return val
422422
}
423423

424424
type uintParser uint
425425

426426
func (d uintParser) ParseEnv(key string, defaltVal any, _ Parameters) any {
427-
val := uintOrDefault(key, defaltVal.(uint))
427+
val := uintOrDefaultGen(key, defaltVal.(uint))
428428

429429
return val
430430
}
@@ -473,7 +473,7 @@ func (i uint16SliceParser) ParseEnv(key string, defaltVal any, options Parameter
473473
type uint16Parser uint
474474

475475
func (d uint16Parser) ParseEnv(key string, defaltVal any, _ Parameters) any {
476-
val := uint16OrDefault(key, defaltVal.(uint16))
476+
val := uintOrDefaultGen(key, defaltVal.(uint16))
477477

478478
return val
479479
}
@@ -482,7 +482,7 @@ func (d uint16Parser) ParseEnv(key string, defaltVal any, _ Parameters) any {
482482
type uint32Parser uint
483483

484484
func (d uint32Parser) ParseEnv(key string, defaltVal any, _ Parameters) any {
485-
val := uint32OrDefault(key, defaltVal.(uint32))
485+
val := uintOrDefaultGen(key, defaltVal.(uint32))
486486

487487
return val
488488
}
@@ -542,7 +542,7 @@ func (b boolSliceParser) ParseEnv(key string, defaltVal any, options Parameters)
542542
type uintptrParser uintptr
543543

544544
func (d uintptrParser) ParseEnv(key string, defaltVal any, _ Parameters) any {
545-
val := uintptrOrDefault(key, defaltVal.(uintptr))
545+
val := uintOrDefaultGen(key, defaltVal.(uintptr))
546546

547547
return val
548548
}

internal/parsers.go

Lines changed: 38 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -449,28 +449,6 @@ func durationSliceOrDefault(key string, defaultVal []time.Duration, separator st
449449
return val
450450
}
451451

452-
// uint64OrDefault retrieves the unt64 value of the environment variable named
453-
// by the key.
454-
// If variable not set or value is empty - defaultVal will be returned.
455-
func uint64OrDefault(key string, defaultVal uint64) uint64 {
456-
env := stringOrDefault(key, "")
457-
if env == "" {
458-
return defaultVal
459-
}
460-
461-
const (
462-
base = 10
463-
bitsize = 64
464-
)
465-
466-
val, err := strconv.ParseUint(env, base, bitsize)
467-
if err != nil {
468-
return defaultVal
469-
}
470-
471-
return val
472-
}
473-
474452
// uint64SliceOrDefault retrieves the uint64 slice value of the environment variable named
475453
// by the key and separated by sep.
476454
// If variable not set or value is empty - defaultVal will be returned.
@@ -499,48 +477,60 @@ func uint64SliceOrDefault(key string, defaultVal []uint64, sep string) []uint64
499477
return val
500478
}
501479

502-
// uint8OrDefault retrieves the unt8 value of the environment variable named
503-
// by the key.
504-
// If variable not set or value is empty - defaultVal will be returned.
505-
func uint8OrDefault(key string, defaultVal uint8) uint8 {
480+
func uintOrDefaultGen[T uint | uint8 | uint16 | uint32 | uint64 | uintptr](key string, defaultVal T) T {
506481
env := stringOrDefault(key, "")
507482
if env == "" {
508483
return defaultVal
509484
}
510485

511486
const (
512-
base = 10
513-
bitsize = 8
487+
base = 10
514488
)
515489

516-
val, err := strconv.ParseUint(env, base, bitsize)
517-
if err != nil {
518-
return defaultVal
519-
}
520-
521-
return uint8(val)
522-
}
523-
524-
// uintOrDefault retrieves the unt value of the environment variable named
525-
// by the key.
526-
// If variable not set or value is empty - defaultVal will be returned.
527-
func uintOrDefault(key string, defaultVal uint) uint {
528-
env := stringOrDefault(key, "")
529-
if env == "" {
530-
return defaultVal
531-
}
490+
var (
491+
bitsize int
492+
castFn func(val uint64) T
493+
)
532494

533-
const (
534-
base = 10
495+
switch any(defaultVal).(type) {
496+
case uint:
497+
bitsize = 0
498+
castFn = func(val uint64) T {
499+
return any(uint(val)).(T)
500+
}
501+
case uint8:
502+
bitsize = 8
503+
castFn = func(val uint64) T {
504+
return any(uint8(val)).(T)
505+
}
506+
case uint16:
507+
bitsize = 16
508+
castFn = func(val uint64) T {
509+
return any(uint16(val)).(T)
510+
}
511+
case uint32:
535512
bitsize = 32
536-
)
513+
castFn = func(val uint64) T {
514+
return any(uint32(val)).(T)
515+
}
516+
case uint64:
517+
bitsize = 64
518+
castFn = func(val uint64) T {
519+
return any(val).(T)
520+
}
521+
case uintptr:
522+
bitsize = 0
523+
castFn = func(val uint64) T {
524+
return any(uintptr(val)).(T)
525+
}
526+
}
537527

538528
val, err := strconv.ParseUint(env, base, bitsize)
539529
if err != nil {
540530
return defaultVal
541531
}
542532

543-
return uint(val)
533+
return castFn(val)
544534
}
545535

546536
// uintSliceOrDefault retrieves the uint slice value of the environment variable named
@@ -655,50 +645,6 @@ func uint32SliceOrDefault(key string, defaultVal []uint32, sep string) []uint32
655645
return val
656646
}
657647

658-
// uint16OrDefault retrieves the unt16 value of the environment variable named
659-
// by the key.
660-
// If variable not set or value is empty - defaultVal will be returned.
661-
func uint16OrDefault(key string, defaultVal uint16) uint16 {
662-
env := stringOrDefault(key, "")
663-
if env == "" {
664-
return defaultVal
665-
}
666-
667-
const (
668-
base = 10
669-
bitsize = 16
670-
)
671-
672-
val, err := strconv.ParseUint(env, base, bitsize)
673-
if err != nil {
674-
return defaultVal
675-
}
676-
677-
return uint16(val)
678-
}
679-
680-
// uint32OrDefault retrieves the unt32 value of the environment variable named
681-
// by the key.
682-
// If variable not set or value is empty - defaultVal will be returned.
683-
func uint32OrDefault(key string, defaultVal uint32) uint32 {
684-
env := stringOrDefault(key, "")
685-
if env == "" {
686-
return defaultVal
687-
}
688-
689-
const (
690-
base = 10
691-
bitsize = 32
692-
)
693-
694-
val, err := strconv.ParseUint(env, base, bitsize)
695-
if err != nil {
696-
return defaultVal
697-
}
698-
699-
return uint32(val)
700-
}
701-
702648
// urlOrDefault retrieves the url.URL value of the environment variable named
703649
// by the key represented by layout.
704650
// If variable not set or value is empty - defaultVal will be returned.
@@ -779,28 +725,6 @@ func ipSliceOrDefault(key string, defaultVal []net.IP, sep string) []net.IP {
779725
return val
780726
}
781727

782-
// uintptrOrDefault retrieves the uintptr value of the environment variable named
783-
// by the key.
784-
// If variable not set or value is empty - defaultVal will be returned.
785-
func uintptrOrDefault(key string, defaultVal uintptr) uintptr {
786-
env := stringOrDefault(key, "")
787-
if env == "" {
788-
return defaultVal
789-
}
790-
791-
const (
792-
base = 10
793-
bitsize = 0
794-
)
795-
796-
val, err := strconv.ParseUint(env, base, bitsize)
797-
if err != nil {
798-
return defaultVal
799-
}
800-
801-
return uintptr(val)
802-
}
803-
804728
// uintptrSliceOrDefault retrieves the uintptr slice value of the environment variable named
805729
// by the key and separated by sep.
806730
// If variable not set or value is empty - defaultVal will be returned.

internal/parsers_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2798,7 +2798,7 @@ func Test_uint64OrDefault(t *testing.T) {
27982798
t.Run(tt.name, func(t *testing.T) {
27992799
tt.precond.maybeSetEnv(t, tt.args.key)
28002800

2801-
got := uint64OrDefault(tt.args.key, tt.args.defaultVal)
2801+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
28022802
assert.Equal(t, tt.expected.val, got)
28032803
})
28042804
}
@@ -3003,7 +3003,7 @@ func Test_uint8OrDefault(t *testing.T) {
30033003
t.Run(tt.name, func(t *testing.T) {
30043004
tt.precond.maybeSetEnv(t, tt.args.key)
30053005

3006-
got := uint8OrDefault(tt.args.key, tt.args.defaultVal)
3006+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
30073007
assert.Equal(t, tt.expected.val, got)
30083008
})
30093009
}
@@ -3095,7 +3095,7 @@ func Test_uintOrDefault(t *testing.T) {
30953095
t.Run(tt.name, func(t *testing.T) {
30963096
tt.precond.maybeSetEnv(t, tt.args.key)
30973097

3098-
got := uintOrDefault(tt.args.key, tt.args.defaultVal)
3098+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
30993099
assert.Equal(t, tt.expected.val, got)
31003100
})
31013101
}
@@ -3187,7 +3187,7 @@ func Test_uint16OrDefault(t *testing.T) {
31873187
t.Run(tt.name, func(t *testing.T) {
31883188
tt.precond.maybeSetEnv(t, tt.args.key)
31893189

3190-
got := uint16OrDefault(tt.args.key, tt.args.defaultVal)
3190+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
31913191
assert.Equal(t, tt.expected.val, got)
31923192
})
31933193
}
@@ -3279,7 +3279,7 @@ func Test_uint32OrDefault(t *testing.T) {
32793279
t.Run(tt.name, func(t *testing.T) {
32803280
tt.precond.maybeSetEnv(t, tt.args.key)
32813281

3282-
got := uint32OrDefault(tt.args.key, tt.args.defaultVal)
3282+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
32833283
assert.Equal(t, tt.expected.val, got)
32843284
})
32853285
}
@@ -3766,7 +3766,7 @@ func Test_uintptrOrDefault(t *testing.T) {
37663766
t.Run(tt.name, func(t *testing.T) {
37673767
tt.precond.maybeSetEnv(t, tt.args.key)
37683768

3769-
got := uintptrOrDefault(tt.args.key, tt.args.defaultVal)
3769+
got := uintOrDefaultGen(tt.args.key, tt.args.defaultVal)
37703770
assert.Equal(t, tt.expected.val, got)
37713771
})
37723772
}

0 commit comments

Comments
 (0)
0