1use serde::{Deserialize, Serialize};
2
3use crate::ConstOrEnv;
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6#[serde(tag = "opcode")]
7pub enum FieldExpression {
8 And(BinaryParam),
9 Or(BinaryParam),
10 Xor(BinaryParam),
11 Not(UnaryParam),
12 Add(BinaryParam),
13 Sub(BinaryParam),
14 Mul(BinaryParam),
15 Div(BinaryParam),
16 Mod(BinaryParam),
17 Eq(BinaryParam),
18 Ne(BinaryParam),
19 LessThan(BinaryParam),
20 GreaterThan(BinaryParam),
21 LessEqualThan(BinaryParam),
22 GreaterEqualThan(BinaryParam),
23 RightShift(BinaryParam),
24 LeftShift(BinaryParam),
25 Neg(UnaryParam),
26 Cond(CondParam),
27 FieldRef(FieldRefParam),
28 NumberOfComponents,
29 ComponentFieldRef(ComponentFieldRefParam),
30 ConstValue(ConstParam),
31 FullRecordRef,
32 RecordRef(RecordRefParam),
33 StringRepr(StringRepr),
34}
35
36#[derive(Serialize, Deserialize, Debug, Clone)]
37pub struct RecordRefParam {
38 pub id: i32,
39}
40
41#[derive(Serialize, Deserialize, Debug, Clone)]
42#[serde(untagged)]
43pub enum ConstValue {
44 Str(String),
45 Number(i64),
46 Float(f64),
47}
48
49#[derive(Serialize, Deserialize, Debug, Clone)]
50pub struct ConstParam {
51 pub value: ConstOrEnv<ConstValue>,
52}
53
54#[derive(Serialize, Deserialize, Debug, Clone)]
55pub struct UnaryParam {
56 pub operand: Box<FieldExpression>,
57}
58
59#[derive(Serialize, Deserialize, Debug, Clone)]
60pub struct BinaryParam {
61 pub lhs: Box<FieldExpression>,
62 pub rhs: Box<FieldExpression>,
63}
64
65#[derive(Serialize, Deserialize, Debug, Clone)]
66pub struct CondParam {
67 pub cond: Box<FieldExpression>,
68 pub then: Box<FieldExpression>,
69 pub elze: Box<FieldExpression>,
70}
71
72#[derive(Serialize, Deserialize, Debug, Clone)]
73pub struct StringRepr {
74 pub value: Box<FieldExpression>,
75}
76
77#[derive(Serialize, Deserialize, Debug, Clone)]
78pub struct FieldRefParam {
79 pub field: String,
80}
81
82#[derive(Serialize, Deserialize, Debug, Clone)]
83pub struct ComponentFieldRefParam {
84 pub target: i32,
85 pub field_name: String,
86}