protospec_build/ast/expression/
mod.rs

1use 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}