code: func (r Rules) Evaluate(headers, query, payload *map[string]interface{}, body *[]byte, remoteAddr string) (bool, error) {
  	switch {
  	case r.And != nil:
  		return r.And.Evaluate(headers, query, payload, body, remoteAddr)
  	case r.Or != nil:
  		return r.Or.Evaluate(headers, query, payload, body, remoteAddr)
  	case r.Not != nil:
  		return r.Not.Evaluate(headers, query, payload, body, remoteAddr)
  	case r.Match != nil:
  		return r.Match.Evaluate(headers, query, payload, body, remoteAddr)
  	}
  
  	return false, nil
  }
docs: // Evaluate finds the first rule property that is not nil and returns the value
  // it evaluates to