neoneo-go/pkg/services/oracle/filter.go
Anna Shaleva 6b21ad9922 *: replace interface{} with any keyword
Everywhere including examples, external interop APIs, bindings generators
code and in other valuable places. A couple of `interface{}` usages are
intentionally left in the CHANGELOG.md, documentation and tests.
2023-04-04 13:22:42 +03:00

39 lines
783 B
Go

package oracle
import (
"bytes"
"errors"
"unicode/utf8"
json "github.com/nspcc-dev/go-ordered-json"
"github.com/nspcc-dev/neo-go/pkg/core/state"
"github.com/nspcc-dev/neo-go/pkg/services/oracle/jsonpath"
)
func filter(value []byte, path string) ([]byte, error) {
if !utf8.Valid(value) {
return nil, errors.New("not an UTF-8")
}
buf := bytes.NewBuffer(value)
d := json.NewDecoder(buf)
d.UseOrderedObject()
var v any
if err := d.Decode(&v); err != nil {
return nil, err
}
result, ok := jsonpath.Get(path, v)
if !ok {
return nil, errors.New("invalid filter")
}
return json.Marshal(result)
}
func filterRequest(result []byte, req *state.OracleRequest) ([]byte, error) {
if req.Filter != nil {
return filter(result, *req.Filter)
}
return result, nil
}