升级验证库, 支持细化real_map / marshal_map

This commit is contained in:
2024-06-23 11:38:26 +08:00
parent 34962e0cd4
commit 505a41edb5
5 changed files with 67 additions and 15 deletions

View File

@@ -8,8 +8,10 @@
package validator
import (
"errors"
"fmt"
"git.zhangdeman.cn/gateway/validator/define"
"git.zhangdeman.cn/zhangdeman/consts"
"git.zhangdeman.cn/zhangdeman/serialize"
"github.com/tidwall/gjson"
)
@@ -25,7 +27,7 @@ func handleMapStringFloat(inputVal any, rule *define.FieldRule) (map[string]floa
res map[string]float64
)
if err = strOrMapConvert(inputVal, &res); nil != err {
if err = strOrMapConvert(inputVal, rule.MapConfig, &res); nil != err {
return nil, err
}
@@ -52,7 +54,7 @@ func handleMapStringAny(inputVal any, rule *define.FieldRule) (map[string]any, e
res map[string]any
)
if err = strOrMapConvert(inputVal, &res); nil != err {
if err = strOrMapConvert(inputVal, rule.MapConfig, &res); nil != err {
return nil, err
}
@@ -79,7 +81,7 @@ func handleMapStringString(inputVal any, rule *define.FieldRule) (map[string]any
res map[string]string
)
if err = strOrMapConvert(inputVal, &res); nil != err {
if err = strOrMapConvert(inputVal, rule.MapConfig, &res); nil != err {
return nil, err
}
@@ -108,7 +110,7 @@ func handleMapStringSlice(inputVal any, rule *define.FieldRule) (map[string][]an
res map[string][]any
)
if err = strOrMapConvert(inputVal, &res); nil != err {
if err = strOrMapConvert(inputVal, rule.MapConfig, &res); nil != err {
return nil, err
}
@@ -163,22 +165,44 @@ func handleMapAnyAny(inputVal any, rule *define.FieldRule) (map[any]any, error)
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:26 2024/4/29
func strOrMapConvert(inputVal any, receiver any) error {
func strOrMapConvert(inputVal any, mapConfig *define.MapConfig, receiver any) error {
var (
err error
)
if inputValStr, ok := inputVal.(string); ok {
if err = serialize.JSON.UnmarshalWithNumber([]byte(inputValStr), receiver); nil != err {
return err
if nil == mapConfig {
if inputValStr, ok := inputVal.(string); ok {
if err = serialize.JSON.UnmarshalWithNumber([]byte(inputValStr), receiver); nil != err {
return err
}
} else {
byteData := serialize.JSON.MarshalForByte(inputVal)
if err = serialize.JSON.UnmarshalWithNumber(byteData, receiver); nil != err {
return err
}
}
} else {
return nil
}
if mapConfig.Mode == consts.DataMapModelMarshal {
if inputValStr, ok := inputVal.(string); ok {
if err = serialize.JSON.UnmarshalWithNumber([]byte(inputValStr), receiver); nil != err {
return err
}
return nil
}
return errors.New("input value is not marshal string")
}
if mapConfig.Mode == consts.DataMapModelReal {
byteData := serialize.JSON.MarshalForByte(inputVal)
if err = serialize.JSON.UnmarshalWithNumber(byteData, receiver); nil != err {
return err
}
return nil
}
return nil
return errors.New(mapConfig.Mode + " : map mode is not support")
}
// validateMap 验证map数据