mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 13:02:33 +02:00
update serialization
This commit is contained in:
parent
6e9b5cc113
commit
497879fb4b
2 changed files with 19 additions and 5 deletions
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
internal/utils/validation.go
Normal file
14
internal/utils/validation.go
Normal 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
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue