Skip to content

Commit

Permalink
upgrade to xpression v0.9.0
Browse files Browse the repository at this point in the history
  • Loading branch information
bhmj committed Nov 20, 2021
1 parent e5de718 commit 829712d
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 14 deletions.
20 changes: 13 additions & 7 deletions expression.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,29 @@ func findClosingBracket(path []byte, i int) (int, error) {

// filterMatch evaluates previously parsed expression and returns boolean to filter out array elements
func filterMatch(input []byte, toks []*xpression.Token) (bool, error) {
varFunc := func(str []byte) (*xpression.Operand, error) {
varFunc := func(str []byte, result *xpression.Operand) error {
if str[0] == '$' {
// root-based reference has already been evaluated at start
return nil
}
if str[0] != '@' {
return xpression.Undefined(), nil
// we only handle item-based references
result.SetUndefined()
return nil
}
str[0] = '$'
defer func() { str[0] = '@' }()
val, err := Get(input, string(str))
if val == nil || err != nil {
// not found or other error
return xpression.Undefined(), nil
result.SetUndefined()
return err
}
op := &xpression.Operand{}
err = decodeValue(val, op)
err = decodeValue(val, result)
if err != nil {
return xpression.Undefined(), nil
result.SetUndefined()
}
return op, nil
return err
}

op, err := xpression.Evaluate(toks, varFunc)
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ module github.com/bhmj/jsonslice

go 1.17

require github.com/bhmj/xpression v0.8.0
require github.com/bhmj/xpression v0.9.0
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github.com/bhmj/xpression v0.8.0 h1:3qO6TLbFNOblQGMoSnf0QlXSZ1PwLTCCXTE6Yy4B+sA=
github.com/bhmj/xpression v0.8.0/go.mod h1:j9oYmEXJjeL9mrgW1+ZDBKJXnbupsCPGhlO9J5YhS1Q=
github.com/bhmj/xpression v0.9.0 h1:fptQyWeYLUybLW3BnSGBnBvjZPdR0/j/SwFVrfenZLo=
github.com/bhmj/xpression v0.9.0/go.mod h1:j9oYmEXJjeL9mrgW1+ZDBKJXnbupsCPGhlO9J5YhS1Q=
10 changes: 6 additions & 4 deletions jsonslice.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,15 +138,17 @@ func Get(input []byte, path string) ([]byte, error) {
break
}
if n.Filter != nil {
for _, tok := range n.Filter {
for i, tok := range n.Filter {
if tok.Type == xpression.VariableOperand && tok.Operand.Str[0] == '$' {
// every variable has an empty token right after it for storing the result
result := n.Filter[i+1]
// evaluate root-based reference
val, err := Get(input, string(tok.Operand.Str))
if err != nil {
// not found or other error
tok.Type = xpression.UndefinedOperand
result.Type = xpression.UndefinedOperand
}
_ = decodeValue(val, &tok.Operand)
xpression.SetLiteral(tok)
_ = decodeValue(val, &result.Operand)
}
}
}
Expand Down

0 comments on commit 829712d

Please sign in to comment.