Skip to content
Snippets Groups Projects
Commit 848a6e30 authored by Danis Kirasirov's avatar Danis Kirasirov
Browse files

update array non-strict convert

parent b6dd8017
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"reflect" "reflect"
"strings"
) )
var stringType = &StringType{} var stringType = &StringType{}
...@@ -62,10 +63,21 @@ func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) i ...@@ -62,10 +63,21 @@ func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) i
if v == nil { if v == nil {
return nil return nil
} }
if _, ok := v.(string); ok {
switch v := v.(type) {
case string:
return v 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) return fmt.Sprintf("%v", v)
} }
......
...@@ -49,7 +49,7 @@ func TestStringField_DecodeNonStrict(t *testing.T) { ...@@ -49,7 +49,7 @@ func TestStringField_DecodeNonStrict(t *testing.T) {
{"Int", String(), 42, "42", false}, {"Int", String(), 42, "42", false},
{"Float", String(), 3.14, "3.14", false}, {"Float", String(), 3.14, "3.14", false},
{"Bool", String(), true, "true", 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 { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment