protospec_build/ast/expression/
mod.rs1use super::*;
2
3mod binary;
4pub use binary::*;
5
6mod unary;
7pub use unary::*;
8
9mod cast;
10pub use cast::*;
11
12mod array_index;
13pub use array_index::*;
14
15mod enum_access;
16pub use enum_access::*;
17
18mod ternary;
19pub use ternary::*;
20
21mod call;
22pub use call::*;
23
24mod ident;
25pub use ident::*;
26
27mod string;
28pub use string::*;
29
30mod int;
31pub use int::*;
32
33mod boolean;
34pub use boolean::*;
35
36mod member;
37pub use member::*;
38
39#[derive(Clone, Serialize, Deserialize)]
40pub enum Expression {
41 Binary(BinaryExpression),
42 Unary(UnaryExpression),
43 Cast(CastExpression),
44 ArrayIndex(ArrayIndexExpression),
45 EnumAccess(EnumAccessExpression),
46 Int(Int),
47 Ref(Ident),
48 Str(Str),
49 Ternary(TernaryExpression),
50 Bool(Bool),
51 Call(CallExpression),
52 Member(MemberExpression),
53}
54
55impl Node for Expression {
56 fn span(&self) -> &Span {
57 match self {
58 Expression::Binary(x) => x.span(),
59 Expression::Unary(x) => x.span(),
60 Expression::Cast(x) => x.span(),
61 Expression::ArrayIndex(x) => x.span(),
62 Expression::EnumAccess(x) => x.span(),
63 Expression::Int(x) => x.span(),
64 Expression::Ref(x) => x.span(),
65 Expression::Str(x) => x.span(),
66 Expression::Ternary(x) => x.span(),
67 Expression::Bool(x) => x.span(),
68 Expression::Call(x) => x.span(),
69 Expression::Member(x) => x.span(),
70 }
71 }
72}