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