瀏覽代碼

chore: make methods consistent in signatures (#1971)

* chore: make methods consistent in signatures

* test: fix fails
Kevin Wan 2 年之前
父節點
當前提交
1d95e95cf8
共有 4 個文件被更改,包括 13 次插入6 次删除
  1. 0 1
      core/logx/tracelogger_test.go
  2. 2 2
      core/mapping/unmarshaler.go
  3. 8 0
      core/mapping/unmarshaler_test.go
  4. 3 3
      core/mapping/utils.go

+ 0 - 1
core/logx/tracelogger_test.go

@@ -210,7 +210,6 @@ func validate(t *testing.T, body string, expectedTrace, expectedSpan bool) {
 		val = doc
 	}
 
-	assert.Nil(t, json.Unmarshal([]byte(body), &val), body)
 	assert.Equal(t, expectedTrace, len(val.Trace) > 0, body)
 	assert.Equal(t, expectedSpan, len(val.Span) > 0, body)
 }

+ 2 - 2
core/mapping/unmarshaler.go

@@ -231,7 +231,7 @@ func (u *Unmarshaler) processFieldPrimitive(field reflect.StructField, value ref
 			return u.processFieldPrimitiveWithJSONNumber(field, value, v, opts, fullName)
 		default:
 			if typeKind == valueKind {
-				if err := validateValueInOptions(opts.options(), mapValue); err != nil {
+				if err := validateValueInOptions(mapValue, opts.options()); err != nil {
 					return err
 				}
 
@@ -253,7 +253,7 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(field reflect.StructFi
 		return err
 	}
 
-	if err := validateValueInOptions(opts.options(), v); err != nil {
+	if err := validateValueInOptions(v, opts.options()); err != nil {
 		return err
 	}
 

+ 8 - 0
core/mapping/unmarshaler_test.go

@@ -1184,6 +1184,14 @@ func TestUnmarshalWithJsonNumberOptionsIncorrect(t *testing.T) {
 	assert.NotNil(t, UnmarshalKey(m, &in))
 }
 
+func TestUnmarshaler_UnmarshalIntOptions(t *testing.T) {
+	var val struct {
+		Sex int `json:"sex,options=0|1"`
+	}
+	input := []byte(`{"sex": 2}`)
+	assert.NotNil(t, UnmarshalJsonBytes(input, &val))
+}
+
 func TestUnmarshalWithUintOptionsCorrect(t *testing.T) {
 	type inner struct {
 		Value  string `key:"value,options=first|second"`

+ 3 - 3
core/mapping/utils.go

@@ -592,16 +592,16 @@ func validateNumberRange(fv float64, nr *numberRange) error {
 	return nil
 }
 
-func validateValueInOptions(options []string, value interface{}) error {
+func validateValueInOptions(val interface{}, options []string) error {
 	if len(options) > 0 {
-		switch v := value.(type) {
+		switch v := val.(type) {
 		case string:
 			if !stringx.Contains(options, v) {
 				return fmt.Errorf(`error: value "%s" is not defined in options "%v"`, v, options)
 			}
 		default:
 			if !stringx.Contains(options, Repr(v)) {
-				return fmt.Errorf(`error: value "%v" is not defined in options "%v"`, value, options)
+				return fmt.Errorf(`error: value "%v" is not defined in options "%v"`, val, options)
 			}
 		}
 	}