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}