github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/services/oracle/filter.go (about)

     1  package oracle
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"unicode/utf8"
     7  
     8  	json "github.com/nspcc-dev/go-ordered-json"
     9  	"github.com/nspcc-dev/neo-go/pkg/core/state"
    10  	"github.com/nspcc-dev/neo-go/pkg/services/oracle/jsonpath"
    11  )
    12  
    13  func filter(value []byte, path string) ([]byte, error) {
    14  	if !utf8.Valid(value) {
    15  		return nil, errors.New("not an UTF-8")
    16  	}
    17  
    18  	buf := bytes.NewBuffer(value)
    19  	d := json.NewDecoder(buf)
    20  	d.UseOrderedObject()
    21  
    22  	var v any
    23  	if err := d.Decode(&v); err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	result, ok := jsonpath.Get(path, v)
    28  	if !ok {
    29  		return nil, errors.New("invalid filter")
    30  	}
    31  	return json.Marshal(result)
    32  }
    33  
    34  func filterRequest(result []byte, req *state.OracleRequest) ([]byte, error) {
    35  	if req.Filter != nil {
    36  		return filter(result, *req.Filter)
    37  	}
    38  	return result, nil
    39  }