1use crate::lexer::Bracket;
2use rust_decimal::Decimal;
3use std::sync::Arc;
4use strum_macros::Display;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum FetchFastTarget {
8 Root,
9 String(Arc<str>),
10 Number(u32),
11}
12
13#[derive(Debug, PartialEq, Eq, Clone, Display)]
15pub enum Opcode {
16 PushNull,
17 PushBool(bool),
18 PushString(Arc<str>),
19 PushNumber(Decimal),
20 Pop,
21 Rot,
22 Fetch,
23 FetchRootEnv,
24 FetchEnv(Arc<str>),
25 FetchFast(Vec<FetchFastTarget>),
26 Negate,
27 Not,
28 Equal,
29 Jump(Jump, u32),
30 In,
31 Less,
32 More,
33 LessOrEqual,
34 MoreOrEqual,
35 Abs,
36 Average,
37 Median,
38 Mode,
39 Min,
40 Max,
41 Round,
42 Floor,
43 Ceil,
44 Sum,
45 Random,
46 Add,
47 Subtract,
48 Multiply,
49 Divide,
50 Modulo,
51 Exponent,
52 Interval {
53 left_bracket: Bracket,
54 right_bracket: Bracket,
55 },
56 Contains,
57 Keys,
58 Values,
59 DateFunction(Arc<str>),
60 DateManipulation(Arc<str>),
61 Uppercase,
62 Lowercase,
63 StartsWith,
64 EndsWith,
65 Matches,
66 FuzzyMatch,
67 Join,
68 Split,
69 Extract,
70 Trim,
71 Slice,
72 Array,
73 Object,
74 Len,
75 ParseDateTime,
76 ParseTime,
77 ParseDuration,
78 IncrementIt,
79 IncrementCount,
80 GetCount,
81 GetLen,
82 Pointer,
83 Begin,
84 End,
85 Flatten,
86 GetType,
87 TypeConversion(TypeConversionKind),
88 TypeCheck(TypeCheckKind),
89}
90
91#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
92pub enum Jump {
93 Forward,
94 Backward,
95 IfTrue,
96 IfFalse,
97 IfNotNull,
98 IfEnd,
99}
100
101#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
103pub enum TypeConversionKind {
104 Number,
105 String,
106 Bool,
107}
108
109#[derive(Debug, PartialEq, Eq, Clone, Copy, Display)]
111pub enum TypeCheckKind {
112 Numeric,
113}