strJoin() now supports linked list and added strJoin(sep, linked-list) test
This commit is contained in:
+40
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user