promql_rs/
function.rs

1use crate::ast::*;
2
3#[derive(Debug)]
4pub struct Function {
5    pub name: &'static str,
6    pub arg_types: Vec<ValueType>,
7    pub return_type: ValueType,
8}
9
10lazy_static::lazy_static! {
11    pub static ref FUNCTIONS: Vec<Function> = vec![
12        Function {
13            name: "abs",
14            arg_types: vec![ValueType::Scalar],
15            return_type: ValueType::Vector,
16        },
17        Function {
18            name: "absent",
19            arg_types: vec![ValueType::Vector],
20            return_type: ValueType::Vector,
21        },
22        Function {
23            name: "absent_over_time",
24            arg_types: vec![ValueType::Matrix],
25            return_type: ValueType::Vector,
26        },
27        Function {
28            name: "acos",
29            arg_types: vec![ValueType::Vector],
30            return_type: ValueType::Vector,
31        },
32        Function {
33            name: "acosh",
34            arg_types: vec![ValueType::Vector],
35            return_type: ValueType::Vector,
36        },
37        Function {
38            name: "asin",
39            arg_types: vec![ValueType::Vector],
40            return_type: ValueType::Vector,
41        },
42        Function {
43            name: "asinh",
44            arg_types: vec![ValueType::Vector],
45            return_type: ValueType::Vector,
46        },
47        Function {
48            name: "atan",
49            arg_types: vec![ValueType::Vector],
50            return_type: ValueType::Vector,
51        },
52        Function {
53            name: "atanh",
54            arg_types: vec![ValueType::Vector],
55            return_type: ValueType::Vector,
56        },
57        Function {
58            name: "avg_over_time",
59            arg_types: vec![ValueType::Matrix],
60            return_type: ValueType::Vector,
61        },
62        Function {
63            name: "ceil",
64            arg_types: vec![ValueType::Vector],
65            return_type: ValueType::Vector,
66        },
67        Function {
68            name: "changes",
69            arg_types: vec![ValueType::Matrix],
70            return_type: ValueType::Vector,
71        },
72        Function {
73            name: "clamp",
74            arg_types: vec![ValueType::Vector, ValueType::Scalar, ValueType::Scalar],
75            return_type: ValueType::Vector,
76        },
77        Function {
78            name: "clamp_max",
79            arg_types: vec![ValueType::Vector, ValueType::Scalar],
80            return_type: ValueType::Vector,
81        },
82        Function {
83            name: "clamp_min",
84            arg_types: vec![ValueType::Vector, ValueType::Scalar],
85            return_type: ValueType::Vector,
86        },
87        Function {
88            name: "cos",
89            arg_types: vec![ValueType::Vector],
90            return_type: ValueType::Vector,
91        },
92        Function {
93            name: "cosh",
94            arg_types: vec![ValueType::Vector],
95            return_type: ValueType::Vector,
96        },
97        Function {
98            name: "count_over_time",
99            arg_types: vec![ValueType::Matrix],
100            return_type: ValueType::Vector,
101        },
102        Function {
103            name: "days_in_month",
104            arg_types: vec![ValueType::Vector],
105            return_type: ValueType::Vector,
106        },
107        Function {
108            name: "day_of_month",
109            arg_types: vec![ValueType::Vector],
110            return_type: ValueType::Vector,
111        },
112        Function {
113            name: "day_of_week",
114            arg_types: vec![ValueType::Vector],
115            return_type: ValueType::Vector,
116        },
117        Function {
118            name: "days_of_year",
119            arg_types: vec![ValueType::Vector],
120            return_type: ValueType::Vector,
121        },
122        Function {
123            name: "deg",
124            arg_types: vec![ValueType::Vector],
125            return_type: ValueType::Vector,
126        },
127        Function {
128            name: "delta",
129            arg_types: vec![ValueType::Matrix],
130            return_type: ValueType::Vector,
131        },
132        Function {
133            name: "deriv",
134            arg_types: vec![ValueType::Matrix],
135            return_type: ValueType::Vector,
136        },
137        Function {
138            name: "exp",
139            arg_types: vec![ValueType::Vector],
140            return_type: ValueType::Vector,
141        },
142        Function {
143            name: "floor",
144            arg_types: vec![ValueType::Vector],
145            return_type: ValueType::Vector,
146        },
147        Function {
148            name: "histogram_count",
149            arg_types: vec![ValueType::Vector],
150            return_type: ValueType::Vector,
151        },
152        Function {
153            name: "histogram_sum",
154            arg_types: vec![ValueType::Vector],
155            return_type: ValueType::Vector,
156        },
157        Function {
158            name: "histogram_quantile",
159            arg_types: vec![ValueType::Scalar, ValueType::Vector],
160            return_type: ValueType::Vector,
161        },
162        Function {
163            name: "holt_winters",
164            arg_types: vec![ValueType::Matrix, ValueType::Scalar, ValueType::Scalar],
165            return_type: ValueType::Vector,
166        },
167        Function {
168            name: "hour",
169            arg_types: vec![ValueType::Vector],
170            return_type: ValueType::Vector,
171        },
172        Function {
173            name: "idelta",
174            arg_types: vec![ValueType::Matrix],
175            return_type: ValueType::Vector,
176        },
177        Function {
178            name: "increase",
179            arg_types: vec![ValueType::Matrix],
180            return_type: ValueType::Vector,
181        },
182        Function {
183            name: "irate",
184            arg_types: vec![ValueType::Matrix],
185            return_type: ValueType::Vector,
186        },
187        Function {
188            name: "label_replace",
189            arg_types: vec![
190                ValueType::Vector,
191                ValueType::String,
192                ValueType::String,
193                ValueType::String,
194                ValueType::String,
195            ],
196            return_type: ValueType::Vector,
197        },
198        Function {
199            name: "label_join",
200            arg_types: vec![ValueType::Vector, ValueType::String, ValueType::String, ValueType::String],
201            return_type: ValueType::Vector,
202        },
203        Function {
204            name: "last_over_time",
205            arg_types: vec![ValueType::Matrix],
206            return_type: ValueType::Vector,
207        },
208        Function {
209            name: "ln",
210            arg_types: vec![ValueType::Vector],
211            return_type: ValueType::Vector,
212        },
213        Function {
214            name: "log10",
215            arg_types: vec![ValueType::Vector],
216            return_type: ValueType::Vector,
217        },
218        Function {
219            name: "log2",
220            arg_types: vec![ValueType::Vector],
221            return_type: ValueType::Vector,
222        },
223        Function {
224            name: "max_over_time",
225            arg_types: vec![ValueType::Matrix],
226            return_type: ValueType::Vector,
227        },
228        Function {
229            name: "min_over_time",
230            arg_types: vec![ValueType::Matrix],
231            return_type: ValueType::Vector,
232        },
233        Function {
234            name: "minute",
235            arg_types: vec![ValueType::Vector],
236            return_type: ValueType::Vector,
237        },
238        Function {
239            name: "month",
240            arg_types: vec![ValueType::Vector],
241            return_type: ValueType::Vector,
242        },
243        Function {
244            name: "pi",
245            arg_types: vec![],
246            return_type: ValueType::Scalar,
247        },
248        Function {
249            name: "predict_linear",
250            arg_types: vec![ValueType::Matrix, ValueType::Scalar],
251            return_type: ValueType::Vector,
252        },
253        Function {
254            name: "quantile_over_time",
255            arg_types: vec![ValueType::Scalar, ValueType::Matrix],
256            return_type: ValueType::Vector,
257        },
258        Function {
259            name: "rad",
260            arg_types: vec![ValueType::Vector],
261            return_type: ValueType::Vector,
262        },
263        Function {
264            name: "rate",
265            arg_types: vec![ValueType::Matrix],
266            return_type: ValueType::Vector,
267        },
268        Function {
269            name: "resets",
270            arg_types: vec![ValueType::Matrix],
271            return_type: ValueType::Vector,
272        },
273        Function {
274            name: "round",
275            arg_types: vec![ValueType::Vector, ValueType::Scalar],
276            return_type: ValueType::Vector,
277        },
278        Function {
279            name: "scalar",
280            arg_types: vec![ValueType::Vector],
281            return_type: ValueType::Scalar,
282        },
283        Function {
284            name: "sgn",
285            arg_types: vec![ValueType::Vector],
286            return_type: ValueType::Vector,
287        },
288        Function {
289            name: "sin",
290            arg_types: vec![ValueType::Vector],
291            return_type: ValueType::Vector,
292        },
293        Function {
294            name: "sinh",
295            arg_types: vec![ValueType::Vector],
296            return_type: ValueType::Vector,
297        },
298        Function {
299            name: "sort",
300            arg_types: vec![ValueType::Vector],
301            return_type: ValueType::Vector,
302        },
303        Function {
304            name: "sort_desc",
305            arg_types: vec![ValueType::Vector],
306            return_type: ValueType::Vector,
307        },
308        Function {
309            name: "sqrt",
310            arg_types: vec![ValueType::Vector],
311            return_type: ValueType::Vector,
312        },
313        Function {
314            name: "stddev_over_time",
315            arg_types: vec![ValueType::Matrix],
316            return_type: ValueType::Vector,
317        },
318        Function {
319            name: "stdvar_over_time",
320            arg_types: vec![ValueType::Matrix],
321            return_type: ValueType::Vector,
322        },
323        Function {
324            name: "sum_over_time",
325            arg_types: vec![ValueType::Matrix],
326            return_type: ValueType::Vector,
327        },
328        Function {
329            name: "tan",
330            arg_types: vec![ValueType::Vector],
331            return_type: ValueType::Vector,
332        },
333        Function {
334            name: "tanh",
335            arg_types: vec![ValueType::Vector],
336            return_type: ValueType::Vector,
337        },
338        Function {
339            name: "time",
340            arg_types: vec![],
341            return_type: ValueType::Scalar,
342        },
343        Function {
344            name: "timestamp",
345            arg_types: vec![ValueType::Vector],
346            return_type: ValueType::Scalar,
347        },
348        Function {
349            name: "vector",
350            arg_types: vec![ValueType::Scalar],
351            return_type: ValueType::Vector,
352        },
353        Function {
354            name: "year",
355            arg_types: vec![ValueType::Vector],
356            return_type: ValueType::Vector,
357        },
358    ];
359}