From 0995c8b839c9c07f843cabb0eac6b40d60e7cd21 Mon Sep 17 00:00:00 2001 From: yusing Date: Tue, 17 Dec 2024 10:32:20 +0800 Subject: [PATCH] fixed slice deserialization --- internal/utils/serialization.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/utils/serialization.go b/internal/utils/serialization.go index 6f70cfb..24ad7a2 100644 --- a/internal/utils/serialization.go +++ b/internal/utils/serialization.go @@ -244,8 +244,12 @@ func Deserialize(src SerializedObject, dst any) E.Error { if e.Param() != "" { detail += ":" + e.Param() } + fieldName, ok := fieldName[e.Field()] + if !ok { + fieldName = e.Field() + } errs.Add(ErrValidationError. - Subject(fieldName[e.Field()]). + Subject(fieldName). Withf("require %q", detail)) } } @@ -424,8 +428,19 @@ func ConvertString(src string, dst reflect.Value) (convertible bool, convErr E.E switch dst.Kind() { case reflect.Slice: // one liner is comma separated list - if len(lines) == 0 { - dst.Set(reflect.ValueOf(strutils.CommaSeperatedList(src))) + if len(lines) == 1 { + values := strutils.CommaSeperatedList(src) + dst.Set(reflect.MakeSlice(dst.Type(), len(values), len(values))) + errs := E.NewBuilder("invalid slice values") + for i, v := range values { + err := Convert(reflect.ValueOf(v), dst.Index(i)) + if err != nil { + errs.Add(err.Subjectf("[%d]", i)) + } + } + if errs.HasError() { + return true, errs.Error() + } return } sl := make([]string, 0, len(lines))