Tweak typed value Array casting; add missing selected prop

This commit is contained in:
Tomaž Jerman
2021-09-27 10:42:35 +02:00
parent 2511476f4c
commit e7fb1e3e07
7 changed files with 229 additions and 25 deletions
+24 -10
View File
@@ -196,21 +196,35 @@ func CastToArray(val interface{}) (out []TypedValue, err error) {
return val.value, nil
}
ref := reflect.ValueOf(val)
if ref.Kind() == reflect.Slice {
out = make([]TypedValue, ref.Len())
for i := 0; i < ref.Len(); i++ {
item := ref.Index(i).Interface()
out[i], err = Typify(item)
if err != nil {
return
cast := func(val interface{}) (out []TypedValue, err error) {
ref := reflect.ValueOf(val)
if ref.Kind() == reflect.Slice {
out = make([]TypedValue, ref.Len())
for i := 0; i < ref.Len(); i++ {
item := ref.Index(i).Interface()
out[i], err = Typify(item)
if err != nil {
return
}
}
}
return
}
return nil, fmt.Errorf("unable to cast %T to []TypedValue", val)
if c, ok := val.(TypedValue); ok {
out, err = cast(c.Get())
} else {
out, err = cast(val)
}
if err != nil {
return nil, err
}
if val == nil {
return nil, fmt.Errorf("unable to cast %T to []TypedValue", val)
}
return
}
var _ TypeValueDecoder = &Array{}