func buildTagsExpFunc(exp *Expression) (TagsExpFunc, error) {
	if exp == nil {
		return PositiveTagsExpFunc, nil
	}
	var teb tagsExpFuncBuilder
	err := teb.buildOrConds(exp.Or)
	if err != nil {
		return nil, err
	}
	return teb.tef, nil
}
buildTagsExpFunc returns  TagsExpFunc by the expression provided
package lql
import (
	"fmt"
	"github.com/logrange/logrange/pkg/model/tag"
	"path"
	"strings"
)
type (
	TagsExpFunc func(tags tag.Set) bool
	tagsExpFuncBuilder struct {
		tef TagsExpFunc
	}
	tagsCondExp struct {
		tags tag.Set
	}
)
var PositiveTagsExpFunc = func(tag.Set) bool { return true }
func BuildTagsExpFunc(tagsCond string) (TagsExpFunc, error) {
	src, err := ParseSource(tagsCond)
	if err != nil {
		return nil, err
	}
	return BuildTagsExpFuncBySource(src)
}
func BuildTagsExpFuncBySource(src *Source) (TagsExpFunc, error) {
	if src == nil {
		return PositiveTagsExpFunc, nil
	}
	if src.Tags != nil {
		tc := &tagsCondExp{src.Tags.Tags}
		return tc.subsetOf, nil
	}
	return buildTagsExpFunc(src.Expr)
}
func (tc *tagsCondExp) subsetOf(tags tag.Set) bool {
	return tc.tags.SubsetOf(tags)
}