1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub enum Expr {
8 Identifier(String),
10 String(String),
12 Number(f64),
14 Boolean(bool),
16 Null,
18 Object(Vec<(String, Expr)>),
20 Array(Vec<Expr>),
22 Call(Box<Expr>, Vec<Expr>),
24 ArrayAccess(Box<Expr>, Box<Expr>),
26 FieldAccess(Box<Expr>, String),
28 Local(Vec<(String, Expr)>, Box<Expr>),
30 Function(Vec<String>, Box<Expr>),
32 StringInterpolation(Vec<StringPart>),
34 ArrayComprehension {
36 expr: Box<Expr>,
37 var_name: String,
38 array_expr: Box<Expr>,
39 condition: Option<Box<Expr>>,
40 },
41 Conditional(Box<Expr>, Box<Expr>, Box<Expr>),
43 BinaryOp(BinaryOp, Box<Expr>, Box<Expr>),
45 UnaryOp(UnaryOp, Box<Expr>),
47}
48
49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
51pub enum Stmt {
52 Expr(Expr),
54 Local(String, Expr),
56 Assign(String, Expr),
58}
59
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
62pub enum BinaryOp {
63 Add,
65 Sub,
67 Mul,
69 Div,
71 Mod,
73 Eq,
75 Ne,
77 Lt,
79 Le,
81 Gt,
83 Ge,
85 And,
87 Or,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
93pub enum UnaryOp {
94 Neg,
96 Not,
98 Plus,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104pub enum StringPart {
105 Literal(String),
107 Interpolation(Expr),
109}