1use serde_json::Value;
4
5#[derive(Clone, Debug, PartialEq)]
7pub enum Ast {
8 Comparison {
10 offset: usize,
11 comparator: Comparator,
12 lhs: Box<Ast>,
13 rhs: Box<Ast>,
14 },
15 Condition {
17 offset: usize,
18 predicate: Box<Ast>,
19 then: Box<Ast>,
20 },
21 Identity { offset: usize },
23 Expref { offset: usize, ast: Box<Ast> },
25 Flatten { offset: usize, node: Box<Ast> },
27 Function {
29 offset: usize,
30 name: String,
31 args: Vec<Ast>,
32 },
33 Field { offset: usize, name: String },
35 Index { offset: usize, idx: i32 },
37 Literal { offset: usize, value: Value },
39 MultiList { offset: usize, elements: Vec<Ast> },
41 MultiHash {
43 offset: usize,
44 elements: Vec<KeyValuePair>,
45 },
46 Not { offset: usize, node: Box<Ast> },
48 Projection {
50 offset: usize,
51 lhs: Box<Ast>,
52 rhs: Box<Ast>,
53 },
54 ObjectValues { offset: usize, node: Box<Ast> },
56 And {
58 offset: usize,
59 lhs: Box<Ast>,
60 rhs: Box<Ast>,
61 },
62 Or {
64 offset: usize,
65 lhs: Box<Ast>,
66 rhs: Box<Ast>,
67 },
68 Slice {
70 offset: usize,
71 start: Option<i32>,
72 stop: Option<i32>,
73 step: i32,
74 },
75 Subexpr {
77 offset: usize,
78 lhs: Box<Ast>,
79 rhs: Box<Ast>,
80 },
81 #[cfg(feature = "let-expr")]
83 VariableRef { offset: usize, name: String },
84 #[cfg(feature = "let-expr")]
86 Let {
87 offset: usize,
88 bindings: Vec<(String, Ast)>,
89 expr: Box<Ast>,
90 },
91}
92
93#[derive(Clone, Debug, PartialEq)]
95pub struct KeyValuePair {
96 pub key: String,
97 pub value: Ast,
98}
99
100#[derive(Clone, Debug, PartialEq, Eq)]
102pub enum Comparator {
103 Equal,
104 NotEqual,
105 LessThan,
106 LessThanEqual,
107 GreaterThan,
108 GreaterThanEqual,
109}