func (e *Engine) Eval(vars map[string]interface{},
	selector model.DecisionSelector) ([]model.DecisionValue, error) {
	return e.evalInternal(vars, selector)
}
Eval accepts an input context and produces a set of decisions as output.

Which decisions are produced depends on the active set of policy instances and whether any rules
within these policies apply to the context.
package policy
import (
	"fmt"
	"sync"
	"github.com/google/cel-policy-templates-go/policy/compiler"
	"github.com/google/cel-policy-templates-go/policy/limits"
	"github.com/google/cel-policy-templates-go/policy/model"
	"github.com/google/cel-policy-templates-go/policy/parser"
	"github.com/google/cel-policy-templates-go/policy/runtime"
	"github.com/google/cel-go/cel"
	"github.com/google/cel-go/interpreter"
)
type Engine struct {
	*model.Registry
	rwMux     sync.RWMutex
	rtOpts    []runtime.TemplateOption
	selectors []Selector
	limits    *limits.Limits
	instances map[string][]*model.Instance
	runtimes  map[string]*runtime.Template
	actPool   *activationPool
}
func NewEngine(opts ...EngineOption) (*Engine, error) {
	e := &Engine{
		Registry:  model.NewRegistry(stdEnv),
		rtOpts:    []runtime.TemplateOption{},
		selectors: []Selector{},
		limits:    limits.NewLimits(),
		instances: map[string][]*model.Instance{},
		runtimes:  map[string]*runtime.Template{},
		actPool:   newActivationPool(),
	}
	var err error
	for _, opt := range opts {
		e, err = opt(e)
		if err != nil {
			return nil, err
		}
	}
	return e, nil
}
func (e *Engine) EvalAll(vars map[string]interface{}) ([]model.DecisionValue, error) {
	return e.evalInternal(vars, nil)
}