func (r FlagRule) Evaluate(usrContext map[string]interface{}) (EvalResult, error) {
	var next []Evaluator
	ok, err := ConstraintList(r.Constraints).Validate(usrContext)
	if ok {
		next = []Evaluator{DistributionList(r.Distributions)}
	}
	return EvalResult{
		Next: next,
	}, err
}
Evaluate will check that all constraints in this rule validates to true. If that
is the case, it returns the list of distributions as next to be evaluated.
If any of the constraints fail to pass, the rule returns an empty list of
next evaluators. In any case, no answer is returned from the evaluation.
package flaggio
var _ Identifier = (*Rule)(nil)
var _ Evaluator = (*FlagRule)(nil)
type Rule struct {
	ID          string
	Constraints []*Constraint
}
func (r Rule) IsRuler() {}
func (r Rule) GetID() string {
	return r.ID
}
func (r *Rule) Populate(identifiers []Identifier) {
	ConstraintList(r.Constraints).Populate(identifiers)
}
type FlagRule struct {
	Rule
	Distributions []*Distribution
}