eval

package
v0.60.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2024 License: Apache-2.0 Imports: 15 Imported by: 1

Documentation

Overview

Package eval holds eval related files

Package eval holds eval related files

Index

Constants

View Source
const (
	FunctionWeight       = 5
	InArrayWeight        = 10
	HandlerWeight        = 50
	RegexpWeight         = 100
	InPatternArrayWeight = 1000
	IteratorWeight       = 2000
)

defines factor applied by specific operator

Variables

View Source
var (
	// IPV4Mask32 ipv4 ip address
	IPV4Mask32 = net.CIDRMask(32, 8*net.IPv4len)
	// IPV6Mask128 ipv6 ip address
	IPV6Mask128 = net.CIDRMask(128, 8*net.IPv6len)
)
View Source
var (
	// CaseInsensitiveCmp lower case values before comparing. Important : this operator override doesn't support approvers
	CaseInsensitiveCmp = &OpOverrides{
		StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
			} else if b.Field != "" {
				b.StringCmpOpts.CaseInsensitive = true
			}

			return StringEquals(a, b, state)
		},
		StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
			}

			return StringValuesContains(a, b, state)
		},
		StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
			} else if b.Field != "" {
				b.StringCmpOpts.CaseInsensitive = true
			}

			return StringArrayContains(a, b, state)
		},
		StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
			}

			return StringArrayMatches(a, b, state)
		},
	}

	// WindowsPathCmp lower case values before comparing, converts patterns to globs, and normalizes path separators. Important : this operator override doesn't support approvers
	WindowsPathCmp = &OpOverrides{
		StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
				a.StringCmpOpts.PathSeparatorNormalize = true
			} else if b.Field != "" {
				b.StringCmpOpts.CaseInsensitive = true
				b.StringCmpOpts.PathSeparatorNormalize = true
			}

			return GlobCmp.StringEquals(a, b, state)
		},
		StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
				a.StringCmpOpts.PathSeparatorNormalize = true
			}

			return GlobCmp.StringValuesContains(a, b, state)
		},
		StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
				a.StringCmpOpts.PathSeparatorNormalize = true
			} else if b.Field != "" {
				b.StringCmpOpts.CaseInsensitive = true
				b.StringCmpOpts.PathSeparatorNormalize = true
			}

			return GlobCmp.StringArrayContains(a, b, state)
		},
		StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			if a.Field != "" {
				a.StringCmpOpts.CaseInsensitive = true
				a.StringCmpOpts.PathSeparatorNormalize = true
			}

			return GlobCmp.StringArrayMatches(a, b, state)
		},
	}
)
View Source
var DefaultStringCmpOpts = StringCmpOpts{}

DefaultStringCmpOpts defines the default comparison options

View Source
var (
	// ErrMultipleEventTypes is returned when multiple event type were inferred from the expression
	ErrMultipleEventTypes = errors.New("expression with multiple event types is not supported")
)
View Source
var (
	// GlobCmp replaces a pattern matcher with a glob matcher for *file.path fields.
	GlobCmp = &OpOverrides{
		StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) {
			if a.ValueType == PatternValueType {
				a.ValueType = GlobValueType
			} else if b.ValueType == PatternValueType {
				b.ValueType = GlobValueType
			}

			return StringEquals(a, b, state)
		},
		StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			if a.ValueType == PatternValueType {
				a.ValueType = GlobValueType
			} else {
				var values StringValues
				for _, v := range b.Values.GetFieldValues() {
					if v.Type == PatternValueType {
						v.Type = GlobValueType
					}
					values.AppendFieldValue(v)
				}
				b = &StringValuesEvaluator{
					Values: values,
				}
			}

			return StringValuesContains(a, b, state)
		},
		StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) {
			if a.ValueType == PatternValueType {
				a.ValueType = GlobValueType
			}

			return StringArrayContains(a, b, state)
		},
		StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) {
			var values StringValues
			for _, v := range b.Values.GetFieldValues() {
				if v.Type == PatternValueType {
					v.Type = GlobValueType
				}
				values.AppendFieldValue(v)
			}
			b = &StringValuesEvaluator{
				Values: values,
			}

			return StringArrayMatches(a, b, state)
		},
	}
)

Functions

func IPNetFromIP added in v0.37.0

func IPNetFromIP(ip net.IP) *net.IPNet

IPNetFromIP returns a IPNET version of the IP

func IPNetsMatch added in v0.37.0

func IPNetsMatch(i1, i2 *net.IPNet) bool

IPNetsMatch returns whether the IPNets match

func IPToInt added in v0.36.0

func IPToInt(ip net.IP) (*big.Int, int, error)

IPToInt transforms an IP to a big Int

func IntToIP added in v0.36.0

func IntToIP(ipInt *big.Int, bits int) net.IP

IntToIP transforms a big Int to an IP

func KeysOfMap added in v0.52.0

func KeysOfMap[M ~map[K]V, K comparable, V any](m M) []K

KeysOfMap returns a slice of the keys contained in the given map

func NotOfValue

func NotOfValue(value interface{}) (interface{}, error)

NotOfValue returns the NOT of a value

func ParseCIDR added in v0.37.0

func ParseCIDR(ip string) (*net.IPNet, error)

ParseCIDR converts an IP/CIDR notation to an IPNet object

func PatternMatches added in v0.34.0

func PatternMatches(pattern string, str string, caseInsensitive bool) bool

PatternMatches matches a pattern against a string

func PatternMatchesWithSegments added in v0.54.0

func PatternMatchesWithSegments(patternElem patternElement, str string, caseInsensitive bool) bool

PatternMatchesWithSegments matches a pattern against a string

Types

type BoolArrayEvaluator

type BoolArrayEvaluator struct {
	EvalFnc     func(ctx *Context) []bool
	Field       Field
	Values      []bool
	Weight      int
	OpOverrides *OpOverrides
	// contains filtered or unexported fields
}

BoolArrayEvaluator returns an array of bool

func (*BoolArrayEvaluator) AppendValues added in v0.56.0

func (b *BoolArrayEvaluator) AppendValues(values ...bool)

AppendValues to the array evaluator

func (*BoolArrayEvaluator) Eval

func (b *BoolArrayEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*BoolArrayEvaluator) GetField

func (b *BoolArrayEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*BoolArrayEvaluator) IsDeterministicFor added in v0.35.0

func (b *BoolArrayEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*BoolArrayEvaluator) IsStatic added in v0.36.0

func (b *BoolArrayEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type BoolEvalFnc

type BoolEvalFnc = func(ctx *Context) bool

BoolEvalFnc describe a eval function return a boolean

type BoolEvaluator

type BoolEvaluator struct {
	EvalFnc     BoolEvalFnc
	Field       Field
	Value       bool
	Weight      int
	OpOverrides *OpOverrides
	// contains filtered or unexported fields
}

BoolEvaluator returns a bool as result of the evaluation

func And

func And(a *BoolEvaluator, b *BoolEvaluator, state *State) (*BoolEvaluator, error)

And operator

func ArrayBoolContains

func ArrayBoolContains(a *BoolEvaluator, b *BoolArrayEvaluator, state *State) (*BoolEvaluator, error)

ArrayBoolContains evaluates array of bool against a value

func BoolArrayEquals added in v0.34.0

func BoolArrayEquals(a *BoolEvaluator, b *BoolArrayEvaluator, state *State) (*BoolEvaluator, error)

func BoolEquals

func BoolEquals(a *BoolEvaluator, b *BoolEvaluator, state *State) (*BoolEvaluator, error)

func CIDRArrayContains added in v0.37.0

func CIDRArrayContains(a *CIDREvaluator, b *CIDRArrayEvaluator, state *State) (*BoolEvaluator, error)

CIDRArrayContains evaluates a CIDR against a list of CIDRs

func CIDRArrayMatches added in v0.37.0

func CIDRArrayMatches(a *CIDRArrayEvaluator, b *CIDRValuesEvaluator, state *State) (*BoolEvaluator, error)

CIDRArrayMatches weak comparison, at least one element of a should be in b.

func CIDRArrayMatchesAll added in v0.37.0

func CIDRArrayMatchesAll(a *CIDRArrayEvaluator, b *CIDRValuesEvaluator, state *State) (*BoolEvaluator, error)

CIDRArrayMatchesAll ensures that all values from a and b match.

func CIDREquals added in v0.36.0

func CIDREquals(a *CIDREvaluator, b *CIDREvaluator, state *State) (*BoolEvaluator, error)

CIDREquals evaluates CIDR ranges

func CIDRValuesContains added in v0.36.0

func CIDRValuesContains(a *CIDREvaluator, b *CIDRValuesEvaluator, state *State) (*BoolEvaluator, error)

CIDRValuesContains evaluates a CIDR against a list of CIDRs

func DurationArrayGreaterOrEqualThan added in v0.46.0

func DurationArrayGreaterOrEqualThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func DurationArrayGreaterThan added in v0.46.0

func DurationArrayGreaterThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func DurationArrayLesserOrEqualThan added in v0.46.0

func DurationArrayLesserOrEqualThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func DurationArrayLesserThan added in v0.46.0

func DurationArrayLesserThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func DurationEqual added in v0.46.0

func DurationEqual(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationEqualArithmeticOperation added in v0.46.0

func DurationEqualArithmeticOperation(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationGreaterOrEqualThan

func DurationGreaterOrEqualThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationGreaterOrEqualThanArithmeticOperation added in v0.46.0

func DurationGreaterOrEqualThanArithmeticOperation(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationGreaterThan

func DurationGreaterThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationGreaterThanArithmeticOperation added in v0.46.0

func DurationGreaterThanArithmeticOperation(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationLesserOrEqualThan

func DurationLesserOrEqualThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationLesserOrEqualThanArithmeticOperation added in v0.46.0

func DurationLesserOrEqualThanArithmeticOperation(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationLesserThan

func DurationLesserThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func DurationLesserThanArithmeticOperation added in v0.46.0

func DurationLesserThanArithmeticOperation(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func GreaterOrEqualThan

func GreaterOrEqualThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func GreaterThan

func GreaterThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayEquals added in v0.34.0

func IntArrayEquals(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayGreaterOrEqualThan added in v0.34.0

func IntArrayGreaterOrEqualThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayGreaterThan added in v0.34.0

func IntArrayGreaterThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayLesserOrEqualThan added in v0.34.0

func IntArrayLesserOrEqualThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayLesserThan added in v0.34.0

func IntArrayLesserThan(a *IntEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

func IntArrayMatches added in v0.34.0

func IntArrayMatches(a *IntArrayEvaluator, b *IntArrayEvaluator, state *State) (*BoolEvaluator, error)

IntArrayMatches weak comparison, a least one element of a should be in b

func IntEquals

func IntEquals(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func LesserOrEqualThan

func LesserOrEqualThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func LesserThan

func LesserThan(a *IntEvaluator, b *IntEvaluator, state *State) (*BoolEvaluator, error)

func Not

func Not(a *BoolEvaluator, state *State) *BoolEvaluator

Not !true operator

func Or

func Or(a *BoolEvaluator, b *BoolEvaluator, state *State) (*BoolEvaluator, error)

Or operator

func StringArrayContains added in v0.34.0

func StringArrayContains(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error)

StringArrayContains evaluates array of strings against a value

func StringArrayContainsWrapper added in v0.34.0

func StringArrayContainsWrapper(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error)

StringArrayContainsWrapper makes use of operator overrides

func StringArrayMatches added in v0.34.0

func StringArrayMatches(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)

StringArrayMatches weak comparison, a least one element of a should be in b. a can't contain regexp

func StringArrayMatchesWrapper added in v0.34.0

func StringArrayMatchesWrapper(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)

StringArrayMatchesWrapper makes use of operator overrides

func StringEquals

func StringEquals(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error)

StringEquals evaluates string

func StringEqualsWrapper added in v0.34.0

func StringEqualsWrapper(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error)

StringEqualsWrapper makes use of operator overrides

func StringValuesContains added in v0.34.0

func StringValuesContains(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)

StringValuesContains evaluates a string against values

func StringValuesContainsWrapper added in v0.34.0

func StringValuesContainsWrapper(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)

StringValuesContainsWrapper makes use of operator overrides

func (*BoolEvaluator) Eval

func (b *BoolEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*BoolEvaluator) GetField

func (b *BoolEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*BoolEvaluator) IsDeterministicFor added in v0.35.0

func (b *BoolEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*BoolEvaluator) IsStatic added in v0.36.0

func (b *BoolEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type BoolVariable added in v0.35.0

type BoolVariable struct {
	Variable
	// contains filtered or unexported fields
}

BoolVariable describes a boolean variable

func NewBoolVariable added in v0.35.0

func NewBoolVariable(boolFnc func(ctx *Context) bool, setFnc func(ctx *Context, value interface{}) error) *BoolVariable

NewBoolVariable returns a new boolean variable

func (*BoolVariable) GetEvaluator added in v0.35.0

func (b *BoolVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

type CIDRArrayEvaluator added in v0.37.0

type CIDRArrayEvaluator struct {
	EvalFnc     func(ctx *Context) []net.IPNet
	Field       Field
	Value       []net.IPNet
	Weight      int
	OpOverrides *OpOverrides
	ValueType   FieldValueType
	// contains filtered or unexported fields
}

CIDRArrayEvaluator returns an array of net.IPNet

func (*CIDRArrayEvaluator) Eval added in v0.37.0

func (s *CIDRArrayEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*CIDRArrayEvaluator) GetField added in v0.37.0

func (s *CIDRArrayEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*CIDRArrayEvaluator) IsDeterministicFor added in v0.37.0

func (s *CIDRArrayEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*CIDRArrayEvaluator) IsStatic added in v0.37.0

func (s *CIDRArrayEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type CIDREvaluator added in v0.36.0

type CIDREvaluator struct {
	EvalFnc     func(ctx *Context) net.IPNet
	Field       Field
	Value       net.IPNet
	Weight      int
	OpOverrides *OpOverrides
	ValueType   FieldValueType
	// contains filtered or unexported fields
}

CIDREvaluator returns a net.IP

func (*CIDREvaluator) Eval added in v0.36.0

func (s *CIDREvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*CIDREvaluator) GetField added in v0.36.0

func (s *CIDREvaluator) GetField() string

GetField returns field name used by this evaluator

func (*CIDREvaluator) IsDeterministicFor added in v0.36.0

func (s *CIDREvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*CIDREvaluator) IsStatic added in v0.36.0

func (s *CIDREvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type CIDRValues added in v0.36.0

type CIDRValues struct {
	// contains filtered or unexported fields
}

CIDRValues describes a set of CIDRs

func (*CIDRValues) AppendCIDR added in v0.36.0

func (c *CIDRValues) AppendCIDR(cidr string) error

AppendCIDR append a CIDR notation

func (*CIDRValues) AppendIP added in v0.36.0

func (c *CIDRValues) AppendIP(ip string) error

AppendIP append ip notation

func (*CIDRValues) Contains added in v0.37.0

func (c *CIDRValues) Contains(ipnet *net.IPNet) bool

Contains returns whether the values match the provided IPNet

func (*CIDRValues) Match added in v0.37.0

func (c *CIDRValues) Match(ipnets []net.IPNet) bool

Match returns whether the values matches the provided IPNets

func (*CIDRValues) MatchAll added in v0.37.0

func (c *CIDRValues) MatchAll(ipnets []net.IPNet) bool

MatchAll returns whether the values matches all the provided IPNets

type CIDRValuesEvaluator added in v0.36.0

type CIDRValuesEvaluator struct {
	EvalFnc   func(ctx *Context) *CIDRValues
	Value     CIDRValues
	Weight    int
	ValueType FieldValueType
	// contains filtered or unexported fields
}

CIDRValuesEvaluator returns a net.IP

func (*CIDRValuesEvaluator) Eval added in v0.36.0

func (s *CIDRValuesEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*CIDRValuesEvaluator) GetField added in v0.36.0

func (s *CIDRValuesEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*CIDRValuesEvaluator) IsDeterministicFor added in v0.36.0

func (s *CIDRValuesEvaluator) IsDeterministicFor(_ Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*CIDRValuesEvaluator) IsStatic added in v0.36.0

func (s *CIDRValuesEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type Context

type Context struct {
	Event Event

	// cache available across all the evaluations
	StringCache map[string][]string
	IntCache    map[string][]int
	BoolCache   map[string][]bool

	// iterator register cache. used to cache entry within a single rule evaluation
	RegisterCache map[RegisterID]*RegisterCacheEntry

	// rule register
	Registers map[RegisterID]int
	// contains filtered or unexported fields
}

Context describes the context used during a rule evaluation

func NewContext

func NewContext(evt Event) *Context

NewContext return a new Context

func (*Context) Now

func (c *Context) Now() time.Time

Now return and cache the `now` timestamp

func (*Context) Reset

func (c *Context) Reset()

Reset the context

func (*Context) SetEvent added in v0.43.0

func (c *Context) SetEvent(evt Event)

SetEvent set the given event to the context

type ContextPool

type ContextPool struct {
	// contains filtered or unexported fields
}

ContextPool defines a pool of context

func NewContextPool

func NewContextPool() *ContextPool

NewContextPool returns a new context pool

func (*ContextPool) Get

func (c *ContextPool) Get(evt Event) *Context

Get returns a context with the given event

func (*ContextPool) Put

func (c *ContextPool) Put(ctx *Context)

Put returns the context to the pool

type ErrAstToEval

type ErrAstToEval struct {
	Pos  lexer.Position
	Text string
}

ErrAstToEval describes an error that occurred during the conversion from the AST to an evaluator

func NewArrayTypeError added in v0.34.0

func NewArrayTypeError(pos lexer.Position, arrayKind reflect.Kind, kind reflect.Kind) *ErrAstToEval

NewArrayTypeError returns a new ErrAstToEval error when an invalid type was used

func NewCIDRTypeError added in v0.36.0

func NewCIDRTypeError(pos lexer.Position, arrayKind reflect.Kind, kind interface{}) *ErrAstToEval

NewCIDRTypeError returns a new ErrAstToEval error when an invalid type was used

func NewError

func NewError(pos lexer.Position, format string, vars ...interface{}) *ErrAstToEval

NewError returns a new ErrAstToEval error

func NewOpError

func NewOpError(pos lexer.Position, op string, err error) *ErrAstToEval

NewOpError returns a new ErrAstToEval error when an operator was used in an invalid manner

func NewOpUnknownError

func NewOpUnknownError(pos lexer.Position, op string) *ErrAstToEval

NewOpUnknownError returns a new ErrAstToEval error when an unknown operator was used

func NewRegisterMultipleFields

func NewRegisterMultipleFields(pos lexer.Position, regID RegisterID, err error) *ErrAstToEval

NewRegisterMultipleFields returns a new ErrAstToEval error when a register is used across multiple fields

func NewRegisterNameNotAllowed

func NewRegisterNameNotAllowed(pos lexer.Position, regID RegisterID, err error) *ErrAstToEval

NewRegisterNameNotAllowed returns a new ErrAstToEval error when a register name is not allowed

func NewTypeError

func NewTypeError(pos lexer.Position, kind reflect.Kind) *ErrAstToEval

NewTypeError returns a new ErrAstToEval error when an invalid type was used

func (*ErrAstToEval) Error

func (r *ErrAstToEval) Error() string

type ErrFieldNotFound

type ErrFieldNotFound struct {
	Field string
}

ErrFieldNotFound error when a field is not present in the model

func (ErrFieldNotFound) Error

func (e ErrFieldNotFound) Error() string

type ErrFieldReadOnly added in v0.40.0

type ErrFieldReadOnly struct {
	Field Field
}

ErrFieldReadOnly is returned when a filter does not support being set with SetFieldValue

func (ErrFieldReadOnly) Error added in v0.40.0

func (e ErrFieldReadOnly) Error() string

type ErrInvalidPattern

type ErrInvalidPattern struct {
	Pattern string
}

ErrInvalidPattern is returned for an invalid regular expression

func (ErrInvalidPattern) Error

func (e ErrInvalidPattern) Error() string

type ErrInvalidRegexp

type ErrInvalidRegexp struct {
	Regexp string
}

ErrInvalidRegexp is returned for an invalid regular expression

func (ErrInvalidRegexp) Error

func (e ErrInvalidRegexp) Error() string

type ErrIteratorNotSupported

type ErrIteratorNotSupported struct {
	Field string
}

ErrIteratorNotSupported error when a field doesn't support iteration

func (ErrIteratorNotSupported) Error

func (e ErrIteratorNotSupported) Error() string

type ErrIteratorVariable added in v0.60.0

type ErrIteratorVariable struct {
	Err error
}

ErrIteratorVariable error when the iterator variable constraints are reached

func (ErrIteratorVariable) Error added in v0.60.0

func (e ErrIteratorVariable) Error() string

type ErrNonStaticPattern

type ErrNonStaticPattern struct {
	Field Field
}

ErrNonStaticPattern when pattern operator is used on a non static value

func (ErrNonStaticPattern) Error

func (e ErrNonStaticPattern) Error() string

type ErrNotSupported

type ErrNotSupported struct {
	Field string
}

ErrNotSupported returned when something is not supported on a field

func (ErrNotSupported) Error

func (e ErrNotSupported) Error() string

type ErrRuleNotCompiled added in v0.34.0

type ErrRuleNotCompiled struct {
	RuleID string
}

ErrRuleNotCompiled error returned by functions that require to have the rule compiled

func (ErrRuleNotCompiled) Error added in v0.34.0

func (e ErrRuleNotCompiled) Error() string

type ErrRuleParse

type ErrRuleParse struct {
	// contains filtered or unexported fields
}

ErrRuleParse describes a parsing error and its position in the expression

func (*ErrRuleParse) Error

func (e *ErrRuleParse) Error() string

type ErrValueOutOfRange added in v0.58.0

type ErrValueOutOfRange struct {
	Field string
}

ErrValueOutOfRange error when the given value is not having the correct range for the type

func (ErrValueOutOfRange) Error added in v0.58.0

func (e ErrValueOutOfRange) Error() string

type ErrValueTypeMismatch

type ErrValueTypeMismatch struct {
	Field string
}

ErrValueTypeMismatch error when the given value is not having the correct type

func (ErrValueTypeMismatch) Error

func (e ErrValueTypeMismatch) Error() string

type Evaluator

type Evaluator interface {
	Eval(ctx *Context) interface{}
	IsDeterministicFor(field Field) bool
	GetField() string
	IsStatic() bool
}

Evaluator is the interface of an evaluator

type Event

type Event interface {
	// Init initialize the event
	Init()
	// GetType returns the Type of the Event
	GetType() EventType
	// GetFieldEventType returns the Event Type for the given Field
	GetFieldEventType(field Field) (EventType, error)
	// SetFieldValue sets the value of the given Field
	SetFieldValue(field Field, value interface{}) error
	// GetFieldValue returns the value of the given Field
	GetFieldValue(field Field) (interface{}, error)
	// GetFieldType returns the Type of the Field
	GetFieldType(field Field) (reflect.Kind, error)
	// GetTags returns a list of tags
	GetTags() []string
}

Event is an interface that an Event has to implement for the evaluation

type EventType

type EventType = string

EventType is the type of an event

type Field

type Field = string

Field name

type FieldValue

type FieldValue struct {
	Value interface{}
	Type  FieldValueType
}

FieldValue describes a field value with its type

type FieldValueType

type FieldValueType int

FieldValueType represents the type of the value of a field

const (
	ScalarValueType   FieldValueType = 1 << 0
	GlobValueType     FieldValueType = 1 << 1
	PatternValueType  FieldValueType = 1 << 2
	RegexpValueType   FieldValueType = 1 << 3
	BitmaskValueType  FieldValueType = 1 << 4
	VariableValueType FieldValueType = 1 << 5
	IPNetValueType    FieldValueType = 1 << 6
	RangeValueType    FieldValueType = 1 << 7
)

Field value types

func (FieldValueType) MarshalJSON added in v0.48.0

func (t FieldValueType) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding of the FieldValueType

func (FieldValueType) String added in v0.48.0

func (t FieldValueType) String() string

type Glob added in v0.34.0

type Glob struct {
	// contains filtered or unexported fields
}

Glob describes file glob object

func NewGlob added in v0.34.0

func NewGlob(pattern string, caseInsensitive bool, normalizePaths bool) (*Glob, error)

NewGlob returns a new glob object from the given pattern

func (*Glob) Contains added in v0.34.0

func (g *Glob) Contains(filename string) bool

Contains returns whether the glob pattern matches the beginning of the filename

func (*Glob) Matches added in v0.34.0

func (g *Glob) Matches(filename string) bool

Matches the given filename

type GlobStringMatcher added in v0.34.0

type GlobStringMatcher struct {
	// contains filtered or unexported fields
}

GlobStringMatcher defines a glob pattern matcher

func (*GlobStringMatcher) Compile added in v0.34.0

func (g *GlobStringMatcher) Compile(pattern string, caseInsensitive bool, normalizePath bool) error

Compile a simple pattern

func (*GlobStringMatcher) Contains added in v0.34.0

func (g *GlobStringMatcher) Contains(value string) bool

Contains returns whether the pattern contains the value

func (*GlobStringMatcher) Matches added in v0.34.0

func (g *GlobStringMatcher) Matches(value string) bool

Matches returns whether the value matches

type GlobalVariables added in v0.35.0

type GlobalVariables struct{}

GlobalVariables holds a set of global variables

func (*GlobalVariables) GetVariable added in v0.35.0

func (v *GlobalVariables) GetVariable(_ string, value interface{}, opts VariableOpts) (VariableValue, error)

GetVariable returns new variable of the type of the specified value

type IntArrayEvaluator

type IntArrayEvaluator struct {
	EvalFnc     func(ctx *Context) []int
	Field       Field
	Values      []int
	Weight      int
	OpOverrides *OpOverrides
	// contains filtered or unexported fields
}

IntArrayEvaluator returns an array of int

func (*IntArrayEvaluator) AppendValues added in v0.34.0

func (i *IntArrayEvaluator) AppendValues(values ...int)

AppendValues to the array evaluator

func (*IntArrayEvaluator) Eval

func (i *IntArrayEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*IntArrayEvaluator) GetField

func (i *IntArrayEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*IntArrayEvaluator) IsDeterministicFor added in v0.35.0

func (i *IntArrayEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*IntArrayEvaluator) IsStatic added in v0.36.0

func (i *IntArrayEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type IntArrayVariable added in v0.35.0

type IntArrayVariable struct {
	Variable
	// contains filtered or unexported fields
}

IntArrayVariable describes an integer array variable

func NewIntArrayVariable added in v0.35.0

func NewIntArrayVariable(intFnc func(ctx *Context) []int, setFnc func(ctx *Context, value interface{}) error) *IntArrayVariable

NewIntArrayVariable returns a new integer array variable

func (*IntArrayVariable) Append added in v0.35.0

func (s *IntArrayVariable) Append(ctx *Context, value interface{}) error

Append a value to the array

func (*IntArrayVariable) GetEvaluator added in v0.35.0

func (s *IntArrayVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*IntArrayVariable) Set added in v0.35.0

func (s *IntArrayVariable) Set(ctx *Context, value interface{}) error

Set the array values

type IntEvaluator

type IntEvaluator struct {
	EvalFnc     func(ctx *Context) int
	Field       Field
	Value       int
	Weight      int
	OpOverrides *OpOverrides
	// contains filtered or unexported fields
}

IntEvaluator returns an int as result of the evaluation

func IntAnd

func IntAnd(a *IntEvaluator, b *IntEvaluator, state *State) (*IntEvaluator, error)

func IntMinus added in v0.46.0

func IntMinus(a *IntEvaluator, b *IntEvaluator, state *State) (*IntEvaluator, error)

func IntNot

func IntNot(a *IntEvaluator, state *State) *IntEvaluator

IntNot ^int operator

func IntOr

func IntOr(a *IntEvaluator, b *IntEvaluator, state *State) (*IntEvaluator, error)

func IntPlus added in v0.46.0

func IntPlus(a *IntEvaluator, b *IntEvaluator, state *State) (*IntEvaluator, error)

func IntXor

func IntXor(a *IntEvaluator, b *IntEvaluator, state *State) (*IntEvaluator, error)

func Minus

func Minus(a *IntEvaluator, state *State) *IntEvaluator

Minus -int operator

func (*IntEvaluator) Eval

func (i *IntEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*IntEvaluator) GetField

func (i *IntEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*IntEvaluator) IsDeterministicFor added in v0.35.0

func (i *IntEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*IntEvaluator) IsStatic added in v0.36.0

func (i *IntEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type IntVariable added in v0.35.0

type IntVariable struct {
	Variable
	// contains filtered or unexported fields
}

IntVariable describes an integer variable

func NewIntVariable added in v0.35.0

func NewIntVariable(intFnc func(ctx *Context) int, setFnc func(ctx *Context, value interface{}) error) *IntVariable

NewIntVariable returns a new integer variable

func (*IntVariable) GetEvaluator added in v0.35.0

func (i *IntVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

type Macro

type Macro struct {
	ID   MacroID
	Opts *Opts
	// contains filtered or unexported fields
}

Macro - Macro object identified by an `ID` containing a SECL `Expression`

func NewMacro added in v0.35.0

func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingContext, opts *Opts) (*Macro, error)

NewMacro parses an expression and returns a new macro

func NewStringValuesMacro added in v0.35.0

func NewStringValuesMacro(id string, values []string, opts *Opts) (*Macro, error)

NewStringValuesMacro returns a new macro from an array of strings

func (*Macro) GenEvaluator

func (m *Macro) GenEvaluator(expression string, model Model) error

GenEvaluator - Compiles and generates the evalutor

func (*Macro) GetAst

func (m *Macro) GetAst() *ast.Macro

GetAst - Returns the representation of the SECL `Expression`

func (*Macro) GetEvaluator

func (m *Macro) GetEvaluator() *MacroEvaluator

GetEvaluator - Returns the MacroEvaluator of the Macro corresponding to the SECL `Expression`

func (*Macro) GetEventType added in v0.57.0

func (m *Macro) GetEventType() EventType

GetEventType - Returns the Event Type that the `Expression` handles

func (*Macro) GetFields

func (m *Macro) GetFields() []Field

GetFields - Returns all the Field that the Macro handles included sub-Macro

func (*Macro) Parse

func (m *Macro) Parse(parsingContext *ast.ParsingContext, expression string) error

Parse - Transforms the SECL `Expression` into its AST representation

type MacroEvaluator

type MacroEvaluator struct {
	Value     interface{}
	EventType EventType
	// contains filtered or unexported fields
}

MacroEvaluator - Evaluation part of a Macro

func (*MacroEvaluator) GetFields

func (m *MacroEvaluator) GetFields() []Field

GetFields - Returns all the Field that the MacroEvaluator handles

type MacroID

type MacroID = string

MacroID - ID of a Macro

type MacroStore added in v0.38.0

type MacroStore struct {
	// contains filtered or unexported fields
}

MacroStore represents a store of SECL Macros

func (*MacroStore) Add added in v0.43.0

func (s *MacroStore) Add(macro *Macro) *MacroStore

Add adds a macro

func (*MacroStore) Contains added in v0.52.0

func (s *MacroStore) Contains(id string) bool

Contains returns returns true is there is already a macro with this ID in the store

func (*MacroStore) Get added in v0.43.0

func (s *MacroStore) Get(id string) *Macro

Get returns the marcro

func (*MacroStore) List added in v0.43.0

func (s *MacroStore) List() []*Macro

List lists macros

type Model

type Model interface {
	// GetEvaluator returns an evaluator for the given field
	GetEvaluator(field Field, regID RegisterID) (Evaluator, error)
	// ValidateField returns whether the value use against the field is valid, ex: for constant
	ValidateField(field Field, value FieldValue) error
	// NewEvent returns a new event instance
	NewEvent() Event
	// GetFieldRestrictions returns the event type for which the field is available
	GetFieldRestrictions(field Field) []EventType
}

Model - interface that a model has to implement for the rule compilation

type MutableBoolVariable added in v0.35.0

type MutableBoolVariable struct {
	Value bool
}

MutableBoolVariable describes a mutable boolean variable

func NewMutableBoolVariable added in v0.35.0

func NewMutableBoolVariable() *MutableBoolVariable

NewMutableBoolVariable returns a new mutable boolean variable

func (*MutableBoolVariable) Append added in v0.35.0

func (m *MutableBoolVariable) Append(_ *Context, _ interface{}) error

Append a value to the boolean

func (*MutableBoolVariable) GetEvaluator added in v0.35.0

func (m *MutableBoolVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*MutableBoolVariable) Set added in v0.35.0

func (m *MutableBoolVariable) Set(_ *Context, value interface{}) error

Set the variable with the specified value

type MutableIntArrayVariable added in v0.35.0

type MutableIntArrayVariable struct {
	Values []int
}

MutableIntArrayVariable describes a mutable integer array variable

func NewMutableIntArrayVariable added in v0.35.0

func NewMutableIntArrayVariable() *MutableIntArrayVariable

NewMutableIntArrayVariable returns a new mutable integer array variable

func (*MutableIntArrayVariable) Append added in v0.35.0

func (m *MutableIntArrayVariable) Append(_ *Context, value interface{}) error

Append a value to the array

func (*MutableIntArrayVariable) GetEvaluator added in v0.35.0

func (m *MutableIntArrayVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*MutableIntArrayVariable) Set added in v0.35.0

func (m *MutableIntArrayVariable) Set(_ *Context, values interface{}) error

Set the variable with the specified value

type MutableIntVariable added in v0.35.0

type MutableIntVariable struct {
	Value int
}

MutableIntVariable describes a mutable integer variable

func NewMutableIntVariable added in v0.35.0

func NewMutableIntVariable() *MutableIntVariable

NewMutableIntVariable returns a new mutable integer variable

func (*MutableIntVariable) Append added in v0.35.0

func (m *MutableIntVariable) Append(_ *Context, value interface{}) error

Append a value to the integer

func (*MutableIntVariable) GetEvaluator added in v0.35.0

func (m *MutableIntVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*MutableIntVariable) Set added in v0.35.0

func (m *MutableIntVariable) Set(_ *Context, value interface{}) error

Set the variable with the specified value

type MutableStringArrayVariable added in v0.35.0

type MutableStringArrayVariable struct {
	LRU *ttlcache.Cache[string, bool]
}

MutableStringArrayVariable describes a mutable string array variable

func NewMutableStringArrayVariable added in v0.35.0

func NewMutableStringArrayVariable(size int, ttl time.Duration) *MutableStringArrayVariable

NewMutableStringArrayVariable returns a new mutable string array variable

func (*MutableStringArrayVariable) Append added in v0.35.0

func (m *MutableStringArrayVariable) Append(_ *Context, value interface{}) error

Append a value to the array

func (*MutableStringArrayVariable) GetEvaluator added in v0.35.0

func (m *MutableStringArrayVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*MutableStringArrayVariable) Set added in v0.35.0

func (m *MutableStringArrayVariable) Set(_ *Context, values interface{}) error

Set the variable with the specified value

type MutableStringVariable added in v0.35.0

type MutableStringVariable struct {
	Value string
}

MutableStringVariable describes a mutable string variable

func NewMutableStringVariable added in v0.35.0

func NewMutableStringVariable() *MutableStringVariable

NewMutableStringVariable returns a new mutable string variable

func (*MutableStringVariable) Append added in v0.35.0

func (m *MutableStringVariable) Append(_ *Context, value interface{}) error

Append a value to the string

func (*MutableStringVariable) GetEvaluator added in v0.35.0

func (m *MutableStringVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*MutableStringVariable) Set added in v0.35.0

func (m *MutableStringVariable) Set(_ *Context, value interface{}) error

Set the variable with the specified value

type MutableVariable added in v0.35.0

type MutableVariable interface {
	Set(ctx *Context, value interface{}) error
	Append(ctx *Context, value interface{}) error
}

MutableVariable is the interface implemented by modifiable variables

type OpOverrides added in v0.34.0

type OpOverrides struct {
	StringEquals         func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error)
	StringValuesContains func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)
	StringArrayContains  func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error)
	StringArrayMatches   func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error)
}

OpOverrides defines operator override functions

type Opts

type Opts struct {
	LegacyFields  map[Field]Field
	Constants     map[string]interface{}
	VariableStore *VariableStore
	MacroStore    *MacroStore
}

Opts are the options to be passed to the evaluator

func (*Opts) AddMacro added in v0.34.0

func (o *Opts) AddMacro(macro *Macro) *Opts

AddMacro add a macro

func (*Opts) AddVariable added in v0.43.0

func (o *Opts) AddVariable(name string, variable VariableValue) *Opts

AddVariable add a variable

func (*Opts) WithConstants added in v0.34.0

func (o *Opts) WithConstants(constants map[string]interface{}) *Opts

WithConstants set constants

func (*Opts) WithLegacyFields added in v0.34.0

func (o *Opts) WithLegacyFields(fields map[Field]Field) *Opts

WithLegacyFields set legacy fields

func (*Opts) WithMacroStore added in v0.43.0

func (o *Opts) WithMacroStore(store *MacroStore) *Opts

WithMacroStore set the macro store

func (*Opts) WithVariableStore added in v0.43.0

func (o *Opts) WithVariableStore(store *VariableStore) *Opts

WithVariableStore set the variable store

func (*Opts) WithVariables added in v0.34.0

func (o *Opts) WithVariables(variables map[string]VariableValue) *Opts

WithVariables set variables

type PatternStringMatcher added in v0.36.0

type PatternStringMatcher struct {
	// contains filtered or unexported fields
}

PatternStringMatcher defines a pattern matcher

func (*PatternStringMatcher) Compile added in v0.36.0

func (p *PatternStringMatcher) Compile(pattern string, caseInsensitive bool) error

Compile a simple pattern

func (*PatternStringMatcher) Matches added in v0.36.0

func (p *PatternStringMatcher) Matches(value string) bool

Matches returns whether the value matches

type RegexpStringMatcher added in v0.34.0

type RegexpStringMatcher struct {
	// contains filtered or unexported fields
}

RegexpStringMatcher defines a regular expression pattern matcher

func (*RegexpStringMatcher) Compile added in v0.34.0

func (r *RegexpStringMatcher) Compile(pattern string, caseInsensitive bool) error

Compile a regular expression based pattern

func (*RegexpStringMatcher) Matches added in v0.34.0

func (r *RegexpStringMatcher) Matches(value string) bool

Matches returns whether the value matches

type Register

type Register struct {
	ID    RegisterID
	Field Field
}

Register defines an eval register

type RegisterCacheEntry added in v0.60.0

type RegisterCacheEntry struct {
	Pos   int
	Value interface{}
}

RegisterCacheEntry used to track the value

type RegisterID

type RegisterID = string

RegisterID identify a register ID

type Rule

type Rule struct {
	ID         RuleID
	Expression string
	Tags       []string
	Model      Model
	Opts       *Opts
	// contains filtered or unexported fields
}

Rule - Rule object identified by an `ID` containing a SECL `Expression`

func NewRule added in v0.43.0

func NewRule(id string, expression string, opts *Opts, tags ...string) *Rule

NewRule returns a new rule

func (*Rule) Eval

func (r *Rule) Eval(ctx *Context) bool

Eval - Evaluates

func (*Rule) GenEvaluator

func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext) error

GenEvaluator - Compile and generates the RuleEvaluator

func (*Rule) GetAst

func (r *Rule) GetAst() *ast.Rule

GetAst - Returns the representation of the SECL `Expression`

func (*Rule) GetEvaluator

func (r *Rule) GetEvaluator() *RuleEvaluator

GetEvaluator - Returns the RuleEvaluator of the Rule corresponding to the SECL `Expression`

func (*Rule) GetEventType added in v0.57.0

func (r *Rule) GetEventType() (EventType, error)

GetEventType - Returns the event type that the `Expression` handles

func (*Rule) GetFieldValues

func (r *Rule) GetFieldValues(field Field) []FieldValue

GetFieldValues returns the values of the given field

func (*Rule) GetFields

func (r *Rule) GetFields() []Field

GetFields - Returns all the Field of the Rule including field of the Macro used

func (*Rule) GetPartialEval

func (r *Rule) GetPartialEval(field Field) BoolEvalFnc

GetPartialEval - Returns the Partial RuleEvaluator for the given Field

func (*Rule) GetPprofLabels added in v0.53.0

func (r *Rule) GetPprofLabels() utils.LabelSet

GetPprofLabels returns the pprof labels

func (*Rule) Parse

func (r *Rule) Parse(parsingContext *ast.ParsingContext) error

Parse - Transforms the SECL `Expression` into its AST representation

func (*Rule) PartialEval

func (r *Rule) PartialEval(ctx *Context, field Field) (bool, error)

PartialEval - Partial evaluation with the given Field

type RuleEvaluator

type RuleEvaluator struct {
	Eval      BoolEvalFnc
	EventType EventType
	// contains filtered or unexported fields
}

RuleEvaluator - Evaluation part of a Rule

func NewRuleEvaluator added in v0.41.0

func NewRuleEvaluator(rule *ast.Rule, model Model, opts *Opts) (*RuleEvaluator, error)

NewRuleEvaluator returns a new evaluator for a rule

func (*RuleEvaluator) GetFields

func (r *RuleEvaluator) GetFields() []Field

GetFields - Returns all the Field that the RuleEvaluator handles

func (*RuleEvaluator) IsPartialAvailable added in v0.53.0

func (r *RuleEvaluator) IsPartialAvailable(field Field) bool

IsPartialAvailable checks if partial have been generated for the given Field

func (*RuleEvaluator) PartialEval

func (r *RuleEvaluator) PartialEval(ctx *Context, field Field) (bool, error)

PartialEval partially evaluation of the Rule with the given Field.

type RuleID

type RuleID = string

RuleID - ID of a Rule

type RuleSetTagValue added in v0.46.0

type RuleSetTagValue = string

RuleSetTagValue - Value of the "ruleset" tag

type ScalarStringMatcher added in v0.36.0

type ScalarStringMatcher struct {
	// contains filtered or unexported fields
}

ScalarStringMatcher defines a scalar matcher

func (*ScalarStringMatcher) Compile added in v0.36.0

func (s *ScalarStringMatcher) Compile(pattern string, caseInsensitive bool) error

Compile a simple pattern

func (*ScalarStringMatcher) Matches added in v0.36.0

func (s *ScalarStringMatcher) Matches(value string) bool

Matches returns whether the value matches

type ScopedVariable added in v0.45.0

type ScopedVariable interface {
	AppendReleaseCallback(callback func())
}

ScopedVariable is the interface to be implemented by scoped variable in order to be released

type ScopedVariables added in v0.35.0

type ScopedVariables struct {
	// contains filtered or unexported fields
}

ScopedVariables holds a set of scoped variables

func NewScopedVariables added in v0.35.0

func NewScopedVariables(scoper Scoper) *ScopedVariables

NewScopedVariables returns a new set of scope variables

func (*ScopedVariables) GetVariable added in v0.35.0

func (v *ScopedVariables) GetVariable(name string, value interface{}, _ VariableOpts) (VariableValue, error)

GetVariable returns new variable of the type of the specified value

func (*ScopedVariables) Len added in v0.45.0

func (v *ScopedVariables) Len() int

Len returns the length of the variable map

func (*ScopedVariables) ReleaseVariable added in v0.35.0

func (v *ScopedVariables) ReleaseVariable(key ScopedVariable)

ReleaseVariable releases a scoped variable

type Scoper added in v0.35.0

type Scoper func(ctx *Context) ScopedVariable

Scoper maps a variable to the entity its scoped to

type State added in v0.34.0

type State struct {
	// contains filtered or unexported fields
}

State defines the current state of the rule compilation

func NewState added in v0.36.0

func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator) *State

NewState returns a new State

func (*State) UpdateFieldValues added in v0.34.0

func (s *State) UpdateFieldValues(field Field, value FieldValue) error

UpdateFieldValues updates the field values

func (*State) UpdateFields added in v0.34.0

func (s *State) UpdateFields(field Field)

UpdateFields updates the fields used in the rule

type StateRegexpCache added in v0.37.0

type StateRegexpCache struct {
	// contains filtered or unexported fields
}

StateRegexpCache is used to cache regexps used in the rule compilation process

type StringArrayEvaluator

type StringArrayEvaluator struct {
	EvalFnc       func(ctx *Context) []string
	Values        []string
	Field         Field
	Weight        int
	OpOverrides   *OpOverrides
	StringCmpOpts StringCmpOpts // only Field evaluator can set this value
	// contains filtered or unexported fields
}

StringArrayEvaluator returns an array of strings

func (*StringArrayEvaluator) AppendValue added in v0.34.0

func (s *StringArrayEvaluator) AppendValue(value string)

AppendValue append the given value

func (*StringArrayEvaluator) Eval

func (s *StringArrayEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*StringArrayEvaluator) GetField

func (s *StringArrayEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*StringArrayEvaluator) IsDeterministicFor added in v0.35.0

func (s *StringArrayEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*StringArrayEvaluator) IsStatic added in v0.36.0

func (s *StringArrayEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

type StringArrayVariable added in v0.35.0

type StringArrayVariable struct {
	Variable
	// contains filtered or unexported fields
}

StringArrayVariable describes a string array variable

func NewStringArrayVariable added in v0.35.0

func NewStringArrayVariable(strFnc func(ctx *Context) []string, setFnc func(ctx *Context, value interface{}) error) *StringArrayVariable

NewStringArrayVariable returns a new string array variable

func (*StringArrayVariable) Append added in v0.35.0

func (s *StringArrayVariable) Append(ctx *Context, value interface{}) error

Append a value to the array

func (*StringArrayVariable) GetEvaluator added in v0.35.0

func (s *StringArrayVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

func (*StringArrayVariable) Set added in v0.35.0

func (s *StringArrayVariable) Set(ctx *Context, value interface{}) error

Set the array values

type StringCmpOpts added in v0.36.0

type StringCmpOpts struct {
	CaseInsensitive        bool
	PathSeparatorNormalize bool
}

StringCmpOpts defines options to apply during string comparison

type StringEvaluator

type StringEvaluator struct {
	EvalFnc       func(ctx *Context) string
	Field         Field
	Value         string
	Weight        int
	OpOverrides   *OpOverrides
	ValueType     FieldValueType
	StringCmpOpts StringCmpOpts // only Field evaluator can set this value
	// contains filtered or unexported fields
}

StringEvaluator returns a string as result of the evaluation

func (*StringEvaluator) Eval

func (s *StringEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*StringEvaluator) GetField

func (s *StringEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*StringEvaluator) GetValue added in v0.34.0

func (s *StringEvaluator) GetValue(ctx *Context) string

GetValue returns the evaluator value

func (*StringEvaluator) IsDeterministicFor added in v0.35.0

func (s *StringEvaluator) IsDeterministicFor(field Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*StringEvaluator) IsStatic added in v0.36.0

func (s *StringEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

func (*StringEvaluator) ToStringMatcher added in v0.36.0

func (s *StringEvaluator) ToStringMatcher(opts StringCmpOpts) (StringMatcher, error)

ToStringMatcher returns a StringMatcher of the evaluator

type StringMatcher added in v0.34.0

type StringMatcher interface {
	Matches(value string) bool
}

StringMatcher defines a pattern matcher

func NewStringMatcher added in v0.34.0

func NewStringMatcher(kind FieldValueType, pattern string, opts StringCmpOpts) (StringMatcher, error)

NewStringMatcher returns a new string matcher

type StringValues added in v0.34.0

type StringValues struct {
	// contains filtered or unexported fields
}

StringValues describes a set of string values, either regex or scalar

func (*StringValues) AppendFieldValue added in v0.34.0

func (s *StringValues) AppendFieldValue(value FieldValue)

AppendFieldValue append a FieldValue

func (*StringValues) AppendScalarValue added in v0.34.0

func (s *StringValues) AppendScalarValue(value string)

AppendScalarValue append a scalar string value

func (*StringValues) Compile added in v0.36.0

func (s *StringValues) Compile(opts StringCmpOpts) error

Compile all the values

func (*StringValues) GetFieldValues added in v0.36.0

func (s *StringValues) GetFieldValues() []FieldValue

GetFieldValues return the list of FieldValue stored in the StringValues

func (*StringValues) GetScalarValues added in v0.34.0

func (s *StringValues) GetScalarValues() []string

GetScalarValues return the scalar values

func (*StringValues) GetStringMatchers added in v0.34.0

func (s *StringValues) GetStringMatchers() []StringMatcher

GetStringMatchers return the pattern matchers

func (*StringValues) Matches added in v0.34.0

func (s *StringValues) Matches(value string) bool

Matches returns whether the value matches the string values

func (*StringValues) SetFieldValues added in v0.34.0

func (s *StringValues) SetFieldValues(values ...FieldValue) error

SetFieldValues apply field values

type StringValuesEvaluator added in v0.34.0

type StringValuesEvaluator struct {
	EvalFnc func(ctx *Context) *StringValues
	Values  StringValues
	Weight  int
	// contains filtered or unexported fields
}

StringValuesEvaluator returns an array of strings

func (*StringValuesEvaluator) AppendMembers added in v0.34.0

func (s *StringValuesEvaluator) AppendMembers(members ...ast.StringMember)

AppendMembers add members to the evaluator

func (*StringValuesEvaluator) Compile added in v0.36.0

func (s *StringValuesEvaluator) Compile(opts StringCmpOpts) error

Compile the underlying StringValues

func (*StringValuesEvaluator) Eval added in v0.34.0

func (s *StringValuesEvaluator) Eval(ctx *Context) interface{}

Eval returns the result of the evaluation

func (*StringValuesEvaluator) GetField added in v0.34.0

func (s *StringValuesEvaluator) GetField() string

GetField returns field name used by this evaluator

func (*StringValuesEvaluator) IsDeterministicFor added in v0.35.0

func (s *StringValuesEvaluator) IsDeterministicFor(_ Field) bool

IsDeterministicFor returns whether the evaluator is partial

func (*StringValuesEvaluator) IsStatic added in v0.36.0

func (s *StringValuesEvaluator) IsStatic() bool

IsStatic returns whether the evaluator is a scalar

func (*StringValuesEvaluator) SetFieldValues added in v0.34.0

func (s *StringValuesEvaluator) SetFieldValues(values ...FieldValue) error

SetFieldValues apply field values

type StringVariable added in v0.35.0

type StringVariable struct {
	Variable
	// contains filtered or unexported fields
}

StringVariable describes a string variable

func NewStringVariable added in v0.35.0

func NewStringVariable(strFnc func(ctx *Context) string, setFnc func(ctx *Context, value interface{}) error) *StringVariable

NewStringVariable returns a new string variable

func (*StringVariable) GetEvaluator added in v0.35.0

func (s *StringVariable) GetEvaluator() interface{}

GetEvaluator returns the variable SECL evaluator

type Variable added in v0.35.0

type Variable struct {
	// contains filtered or unexported fields
}

Variable describes a SECL variable

func (*Variable) Append added in v0.35.0

func (v *Variable) Append(_ *Context, _ interface{}) error

Append a value to the variable

func (*Variable) Set added in v0.35.0

func (v *Variable) Set(ctx *Context, value interface{}) error

Set the variable with the specified value

type VariableOpts added in v0.56.0

type VariableOpts struct {
	Size int
	TTL  time.Duration
}

VariableOpts holds the options of a variable set

type VariableStore added in v0.43.0

type VariableStore struct {
	Variables map[string]VariableValue
}

VariableStore represents a store of SECL variables

func (*VariableStore) Add added in v0.43.0

func (s *VariableStore) Add(name string, variable VariableValue) *VariableStore

Add adds a variable

func (*VariableStore) Get added in v0.43.0

func (s *VariableStore) Get(name string) VariableValue

Get returns the variable

type VariableValue

type VariableValue interface {
	GetEvaluator() interface{}
}

VariableValue describes a SECL variable value

type Variables added in v0.35.0

type Variables struct {
	// contains filtered or unexported fields
}

Variables holds a set of variables

func NewVariables added in v0.56.0

func NewVariables() *Variables

NewVariables returns a new set of variables

func (*Variables) GetBool added in v0.35.0

func (v *Variables) GetBool(name string) bool

GetBool returns the boolean value of the specified variable

func (*Variables) GetInt added in v0.35.0

func (v *Variables) GetInt(name string) int

GetInt returns the integer value of the specified variable

func (*Variables) GetIntArray added in v0.35.0

func (v *Variables) GetIntArray(name string) []int

GetIntArray returns the integer array value of the specified variable

func (*Variables) GetString added in v0.35.0

func (v *Variables) GetString(name string) string

GetString returns the string value of the specified variable

func (*Variables) GetStringArray added in v0.35.0

func (v *Variables) GetStringArray(name string) []string

GetStringArray returns the string array value of the specified variable

func (*Variables) Set added in v0.35.0

func (v *Variables) Set(name string, value interface{}) bool

Set the value of the specified variable

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL