1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
#[derive(Debug)] pub enum RelationOp { LessThan, LessThanEq, GreaterThan, GreaterThanEq, Equals, NotEquals, In, } #[derive(Debug)] pub enum ArithmeticOp { Add, Subtract, Divide, Multiply, Modulus, } #[derive(Debug)] pub enum UnaryOp { Not, DoubleNot, Minus, DoubleMinus, } #[derive(Debug)] pub enum Expression { Arithmetic { left: Box<Expression>, op: ArithmeticOp, right: Box<Expression> }, Relation { left: Box<Expression>, op: RelationOp, right: Box<Expression> }, Ternary { condition: Box<Expression>, left: Box<Expression>, right: Box<Expression> }, Or { left: Box<Expression>, right: Box<Expression> }, And { left: Box<Expression>, right: Box<Expression> }, Unary { op: UnaryOp, right: Box<Expression> }, Member { primary: Box<Expression>, member: Member }, Function { identifier: String, arguments: Vec<Box<Expression>> }, List { members: Vec<Box<Expression>> }, Map {fields: Vec<(Box<Expression>, Box<Expression>)>}, Literal(Literal), Ident(String), } #[derive(Debug)] pub enum Member { Attribute { identifier: String }, Function { identifier: String, arguments: Vec<Box<Expression>> }, Index { expression: Box<Expression> }, Fields { fields: Vec<(String, Box<Expression>)> }, } #[derive(Debug)] pub enum Literal { Int(i32), UInt(u32), }