From 848a6e30a632e6040e4ff784913afc0651c4c1cf Mon Sep 17 00:00:00 2001 From: Danis Kirasirov <dbgbbu@gmail.com> Date: Mon, 7 Apr 2025 14:00:42 +0300 Subject: [PATCH] update array non-strict convert --- pkg/schema/field/string.go | 14 +++++++++++++- pkg/schema/field/string_test.go | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pkg/schema/field/string.go b/pkg/schema/field/string.go index e741b3e3..97f96dae 100644 --- a/pkg/schema/field/string.go +++ b/pkg/schema/field/string.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "strings" ) var stringType = &StringType{} @@ -62,10 +63,21 @@ func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) i if v == nil { return nil } - if _, ok := v.(string); ok { + + switch v := v.(type) { + case string: return v + case []interface{}: + // Преобразование списка в строку происходит через пробел, + // чтобы сохранить совместимость при обратном преобразовании в список + elems := make([]string, len(v)) + for i, elem := range v { + elems[i] = fmt.Sprintf("%v", elem) + } + return strings.Join(elems, " ") } + // По умолчанию используется стандартное форматирование return fmt.Sprintf("%v", v) } diff --git a/pkg/schema/field/string_test.go b/pkg/schema/field/string_test.go index 38ce350d..2a1f7be6 100644 --- a/pkg/schema/field/string_test.go +++ b/pkg/schema/field/string_test.go @@ -49,7 +49,7 @@ func TestStringField_DecodeNonStrict(t *testing.T) { {"Int", String(), 42, "42", false}, {"Float", String(), 3.14, "3.14", false}, {"Bool", String(), true, "true", false}, - {"Array", String(), []interface{}{1, "2"}, "[1 2]", false}, + {"Array", String(), []interface{}{1, "2"}, "1 2", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { -- GitLab