code: func (r MatchRule) Evaluate(headers, query, payload *map[string]interface{}, body *[]byte, remoteAddr string) (bool, error) {
  	if r.Type == IPWhitelist {
  		return CheckIPWhitelist(remoteAddr, r.IPRange)
  	}
  	if r.Type == ScalrSignature {
  		return CheckScalrSignature(*headers, *body, r.Secret, true)
  	}
  
  	if arg, ok := r.Parameter.Get(headers, query, payload); ok {
  		switch r.Type {
  		case MatchValue:
  			return arg == r.Value, nil
  		case MatchRegex:
  			return regexp.MatchString(r.Regex, arg)
  		case MatchHashSHA1:
  			_, err := CheckPayloadSignature(*body, r.Secret, arg)
  			return err == nil, err
  		case MatchHashSHA256:
  			_, err := CheckPayloadSignature256(*body, r.Secret, arg)
  			return err == nil, err
  		}
  	}
  	return false, nil
  }
docs: // Evaluate MatchRule will return based on the type