mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-02-02 16:28:39 +08:00
feat: support bool for env tag (#2593)
This commit is contained in:
parent
69068cdaf0
commit
b562e940e7
@ -6,6 +6,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@ -342,6 +343,14 @@ func (u *Unmarshaler) processFieldWithEnvValue(field reflect.StructField, value
|
|||||||
envVal string, opts *fieldOptionsWithContext, fullName string) error {
|
envVal string, opts *fieldOptionsWithContext, fullName string) error {
|
||||||
fieldKind := field.Type.Kind()
|
fieldKind := field.Type.Kind()
|
||||||
switch fieldKind {
|
switch fieldKind {
|
||||||
|
case reflect.Bool:
|
||||||
|
val, err := strconv.ParseBool(envVal)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field %q with environment variable, %w", fullName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
value.SetBool(val)
|
||||||
|
return nil
|
||||||
case durationType.Kind():
|
case durationType.Kind():
|
||||||
if err := fillDurationValue(fieldKind, value, envVal); err != nil {
|
if err := fillDurationValue(fieldKind, value, envVal); err != nil {
|
||||||
return fmt.Errorf("unmarshal field %q with environment variable, %w", fullName, err)
|
return fmt.Errorf("unmarshal field %q with environment variable, %w", fullName, err)
|
||||||
|
@ -3186,6 +3186,47 @@ func TestUnmarshal_EnvFloatOverwrite(t *testing.T) {
|
|||||||
assert.Equal(t, float32(123.45), v.Age)
|
assert.Equal(t, float32(123.45), v.Age)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshal_EnvBoolTrue(t *testing.T) {
|
||||||
|
type Value struct {
|
||||||
|
Enable bool `key:"enable,env=TEST_NAME_BOOL_TRUE"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const envName = "TEST_NAME_BOOL_TRUE"
|
||||||
|
os.Setenv(envName, "true")
|
||||||
|
defer os.Unsetenv(envName)
|
||||||
|
|
||||||
|
var v Value
|
||||||
|
assert.NoError(t, UnmarshalKey(emptyMap, &v))
|
||||||
|
assert.True(t, v.Enable)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshal_EnvBoolFalse(t *testing.T) {
|
||||||
|
type Value struct {
|
||||||
|
Enable bool `key:"enable,env=TEST_NAME_BOOL_FALSE"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const envName = "TEST_NAME_BOOL_FALSE"
|
||||||
|
os.Setenv(envName, "false")
|
||||||
|
defer os.Unsetenv(envName)
|
||||||
|
|
||||||
|
var v Value
|
||||||
|
assert.NoError(t, UnmarshalKey(emptyMap, &v))
|
||||||
|
assert.False(t, v.Enable)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshal_EnvBoolBad(t *testing.T) {
|
||||||
|
type Value struct {
|
||||||
|
Enable bool `key:"enable,env=TEST_NAME_BOOL_BAD"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const envName = "TEST_NAME_BOOL_BAD"
|
||||||
|
os.Setenv(envName, "bad")
|
||||||
|
defer os.Unsetenv(envName)
|
||||||
|
|
||||||
|
var v Value
|
||||||
|
assert.Error(t, UnmarshalKey(emptyMap, &v))
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshal_EnvDuration(t *testing.T) {
|
func TestUnmarshal_EnvDuration(t *testing.T) {
|
||||||
type Value struct {
|
type Value struct {
|
||||||
Duration time.Duration `key:"duration,env=TEST_NAME_DURATION"`
|
Duration time.Duration `key:"duration,env=TEST_NAME_DURATION"`
|
||||||
|
Loading…
Reference in New Issue
Block a user