strJoin() now supports linked list and added strJoin(sep, linked-list) test

This commit is contained in:
2026-08-02 17:03:35 +02:00
parent b080eaf49f
commit 5cd48bdc50
2 changed files with 44 additions and 6 deletions
+40 -4
View File
@@ -12,6 +12,8 @@ import (
"git.portale-stac.it/go-pkg/expr/kern"
"git.portale-stac.it/go-pkg/expr/types"
"git.portale-stac.it/go-pkg/expr/types/array"
"git.portale-stac.it/go-pkg/expr/types/dict"
"git.portale-stac.it/go-pkg/expr/types/list"
)
const (
@@ -45,14 +47,24 @@ func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result
if v, exists := args[kern.ParamItem]; exists {
argv := v.([]any)
if len(argv) == 1 {
if a, ok := argv[0].(*array.ArrayType); ok {
result, err = doJoinStr(name, sep, NewListIterator(a, nil))
} else if it, ok := argv[0].(kern.Iterator); ok {
var it kern.Iterator
if it, ok = argv[0].(kern.Iterator); !ok {
if a, ok := argv[0].(*array.ArrayType); ok {
it = NewArrayIteratorFromArray(a, nil)
} else if l, ok := argv[0].(*list.LinkedList); ok {
it = NewLinkedListIterator(l, nil)
} else if d, ok := argv[0].(*dict.DictType); ok {
if it, err = NewDictIteratorA(d, "none", "values"); err != nil {
return
}
}
}
if it != nil {
result, err = doJoinStr(name, sep, it)
} else if s, ok := argv[0].(string); ok {
result = s
} else {
err = kern.ErrInvalidParameterValue(name, kern.ParamItem, v)
err = kern.ErrInvalidParameterValue(name, kern.ParamItem, argv[0])
}
} else {
result, err = doJoinStr(name, sep, NewArrayIterator(argv))
@@ -64,6 +76,30 @@ func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result
return
}
// func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) {
// if sep, ok := args[kern.ParamSeparator].(string); ok {
// if v, exists := args[kern.ParamItem]; exists {
// argv := v.([]any)
// if len(argv) == 1 {
// if a, ok := argv[0].(*array.ArrayType); ok {
// result, err = doJoinStr(name, sep, NewListIterator(a, nil))
// } else if it, ok := argv[0].(kern.Iterator); ok {
// result, err = doJoinStr(name, sep, it)
// } else if s, ok := argv[0].(string); ok {
// result = s
// } else {
// err = kern.ErrInvalidParameterValue(name, kern.ParamItem, argv[0])
// }
// } else {
// result, err = doJoinStr(name, sep, NewArrayIterator(argv))
// }
// }
// } else {
// err = kern.ErrWrongParamType(name, kern.ParamSeparator, kern.TypeString, args[kern.ParamSeparator])
// }
// return
// }
func subStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) {
var start = 0
var count = -1