func SetupMatcher(c *caddy.Controller, fns ...map[string]ExprFunc) (*Matcher, error) {
	exprStr, err := ParseConditions(c)
	if err != nil {
		return nil, err
	}
	return SetupMatcherString(exprStr, fns...)
}
SetupMatcher parses the current dispenser block and returns a DHCP
message matcher
package matcher
import (
	"context"
	"fmt"
	"strings"
	"github.com/Knetic/govaluate"
	"github.com/caddyserver/caddy"
	"github.com/insomniacslk/dhcp/dhcpv4"
	"github.com/nextdhcp/nextdhcp/core/replacer"
)
type (
	Matcher struct {
		expr *govaluate.EvaluableExpression
	}
	ExprFunc func(args ...interface{}) (interface{}, error)
	evalParams struct {
		replacer replacer.Replacer
		req      *dhcpv4.DHCPv4
	}
)