1package interfaces
2
3import (
4	"context"
5
6	"github.com/go-graphite/carbonapi/expr/types"
7	"github.com/go-graphite/carbonapi/pkg/parser"
8)
9
10// FunctionBase is a set of base methods that partly satisfy Function interface and most probably nobody will modify
11type FunctionBase struct {
12	Evaluator Evaluator
13}
14
15// SetEvaluator sets evaluator
16func (b *FunctionBase) SetEvaluator(evaluator Evaluator) {
17	b.Evaluator = evaluator
18}
19
20// GetEvaluator returns evaluator
21func (b *FunctionBase) GetEvaluator() Evaluator {
22	return b.Evaluator
23}
24
25// Evaluator is a interface for any existing expression parser
26type Evaluator interface {
27	Eval(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error)
28}
29
30type Order int
31
32const (
33	Any Order = iota
34	Last
35)
36
37type RewriteFunctionMetadata struct {
38	Name  string
39	Order Order
40	F     RewriteFunction
41}
42
43type FunctionMetadata struct {
44	Name  string
45	Order Order
46	F     Function
47}
48
49// Function is interface that all graphite functions should follow
50type Function interface {
51	SetEvaluator(evaluator Evaluator)
52	GetEvaluator() Evaluator
53	Do(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error)
54	Description() map[string]types.FunctionDescription
55}
56
57// Function is interface that all graphite functions should follow
58type RewriteFunction interface {
59	SetEvaluator(evaluator Evaluator)
60	GetEvaluator() Evaluator
61	Do(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) (bool, []string, error)
62	Description() map[string]types.FunctionDescription
63}
64