Module split

This commit is contained in:
Ian Gulliver
2023-04-20 18:01:36 +00:00
parent e0c92c24fb
commit f50e6e228c
30 changed files with 4293 additions and 0 deletions

56
op.go Normal file
View File

@@ -0,0 +1,56 @@
package path
import (
"strings"
)
func op(obj any, path string, matchStr string, cb func(any, any, string) bool) (bool, error) {
objVal, err := Get(obj, path)
if err != nil {
return false, err
}
matchVal, err := parse(matchStr, objVal)
if err != nil {
return false, err
}
if isSlice(objVal) {
return anyTrue(objVal, func(x any, _ int) bool { return cb(x, matchVal, matchStr) }), nil
}
return cb(objVal, matchVal, matchStr), nil
}
func opList(obj any, path string, matchStr string, cb func(any, any, string) bool) (bool, error) {
objVal, err := Get(obj, path)
if err != nil {
return false, err
}
if objVal == nil {
return false, nil
}
matchVal := []any{}
matchParts := strings.Split(matchStr, ",")
for _, matchPart := range matchParts {
matchTmp, err := parse(matchPart, objVal)
if err != nil {
return false, err
}
matchVal = append(matchVal, matchTmp)
}
return anyTrue(matchVal, func(y any, i int) bool {
str := matchParts[i]
if isSlice(objVal) {
return anyTrue(objVal, func(x any, _ int) bool { return cb(x, y, str) })
}
return cb(objVal, y, str)
}), nil
}