update serialization

This commit is contained in:
yusing 2024-11-30 05:51:17 +08:00
parent 6e9b5cc113
commit 497879fb4b
2 changed files with 19 additions and 5 deletions

View file

@ -33,11 +33,8 @@ var (
ErrMapMissingColon = E.New("map missing colon") ErrMapMissingColon = E.New("map missing colon")
ErrMapTooManyColons = E.New("map too many colons") ErrMapTooManyColons = E.New("map too many colons")
ErrUnknownField = E.New("unknown field") ErrUnknownField = E.New("unknown field")
ErrValidationError = E.New("validation error")
) )
var validate = validator.New()
func ValidateYaml(schema *jsonschema.Schema, data []byte) E.Error { func ValidateYaml(schema *jsonschema.Schema, data []byte) E.Error {
var i any var i any
@ -185,6 +182,7 @@ func Deserialize(src SerializedObject, dst any) E.Error {
case reflect.Struct: case reflect.Struct:
needValidate := false needValidate := false
mapping := make(map[string]reflect.Value) mapping := make(map[string]reflect.Value)
fieldName := make(map[string]string)
for _, field := range reflect.VisibleFields(dstT) { for _, field := range reflect.VisibleFields(dstT) {
var key string var key string
if jsonTag, ok := field.Tag.Lookup("json"); ok { if jsonTag, ok := field.Tag.Lookup("json"); ok {
@ -192,7 +190,9 @@ func Deserialize(src SerializedObject, dst any) E.Error {
} else { } else {
key = field.Name key = field.Name
} }
mapping[strutils.ToLowerNoSnake(key)] = dstV.FieldByName(field.Name) key = strutils.ToLowerNoSnake(key)
mapping[key] = dstV.FieldByName(field.Name)
fieldName[field.Name] = key
_, ok := field.Tag.Lookup("validate") _, ok := field.Tag.Lookup("validate")
if ok { if ok {
needValidate = true needValidate = true
@ -218,7 +218,7 @@ func Deserialize(src SerializedObject, dst any) E.Error {
detail += ":" + e.Param() detail += ":" + e.Param()
} }
errs.Add(ErrValidationError. errs.Add(ErrValidationError.
Subject(strutils.ToLowerNoSnake(e.Field())). Subject(fieldName[e.Field()]).
Withf("require %q", detail)) Withf("require %q", detail))
} }
} }

View file

@ -0,0 +1,14 @@
package utils
import (
"github.com/go-playground/validator/v10"
E "github.com/yusing/go-proxy/internal/error"
)
var validate = validator.New()
var ErrValidationError = E.New("validation error")
func Validator() *validator.Validate {
return validate
}