src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

api.go (1474B)


      1 package jmespath
      2 
      3 import "strconv"
      4 
      5 // JMESPath is the representation of a compiled JMES path query. A JMESPath is
      6 // safe for concurrent use by multiple goroutines.
      7 type JMESPath struct {
      8 	ast  ASTNode
      9 	intr *treeInterpreter
     10 }
     11 
     12 // Compile parses a JMESPath expression and returns, if successful, a JMESPath
     13 // object that can be used to match against data.
     14 func Compile(expression string) (*JMESPath, error) {
     15 	parser := NewParser()
     16 	ast, err := parser.Parse(expression)
     17 	if err != nil {
     18 		return nil, err
     19 	}
     20 	jmespath := &JMESPath{ast: ast, intr: newInterpreter()}
     21 	return jmespath, nil
     22 }
     23 
     24 // MustCompile is like Compile but panics if the expression cannot be parsed.
     25 // It simplifies safe initialization of global variables holding compiled
     26 // JMESPaths.
     27 func MustCompile(expression string) *JMESPath {
     28 	jmespath, err := Compile(expression)
     29 	if err != nil {
     30 		panic(`jmespath: Compile(` + strconv.Quote(expression) + `): ` + err.Error())
     31 	}
     32 	return jmespath
     33 }
     34 
     35 // Search evaluates a JMESPath expression against input data and returns the result.
     36 func (jp *JMESPath) Search(data interface{}) (interface{}, error) {
     37 	return jp.intr.Execute(jp.ast, data)
     38 }
     39 
     40 // Search evaluates a JMESPath expression against input data and returns the result.
     41 func Search(expression string, data interface{}) (interface{}, error) {
     42 	intr := newInterpreter()
     43 	parser := NewParser()
     44 	ast, err := parser.Parse(expression)
     45 	if err != nil {
     46 		return nil, err
     47 	}
     48 	return intr.Execute(ast, data)
     49 }