prodigy/cook/execution/expression/
ast.rs1use serde_json::Value;
7
8#[derive(Debug, Clone, PartialEq)]
10pub enum Expression {
11 Number(f64),
13 String(String),
14 Boolean(bool),
15 Null,
16
17 Field(Vec<String>), Index(Box<Expression>, Box<Expression>), ArrayWildcard(Box<Expression>, Vec<String>), Equal(Box<Expression>, Box<Expression>),
24 NotEqual(Box<Expression>, Box<Expression>),
25 GreaterThan(Box<Expression>, Box<Expression>),
26 LessThan(Box<Expression>, Box<Expression>),
27 GreaterEqual(Box<Expression>, Box<Expression>),
28 LessEqual(Box<Expression>, Box<Expression>),
29
30 And(Box<Expression>, Box<Expression>),
32 Or(Box<Expression>, Box<Expression>),
33 Not(Box<Expression>),
34
35 Contains(Box<Expression>, Box<Expression>),
37 StartsWith(Box<Expression>, Box<Expression>),
38 EndsWith(Box<Expression>, Box<Expression>),
39 Matches(Box<Expression>, Box<Expression>), IsNull(Box<Expression>),
43 IsNotNull(Box<Expression>),
44 IsNumber(Box<Expression>),
45 IsString(Box<Expression>),
46 IsBool(Box<Expression>),
47 IsArray(Box<Expression>),
48 IsObject(Box<Expression>),
49
50 Length(Box<Expression>),
52 Sum(Box<Expression>),
53 Count(Box<Expression>),
54 Min(Box<Expression>),
55 Max(Box<Expression>),
56 Avg(Box<Expression>),
57
58 In(Box<Expression>, Vec<Value>), Variable(String), }
64
65#[derive(Debug, Clone)]
67pub struct SortKey {
68 pub expression: Expression,
69 pub direction: SortDirection,
70 pub null_handling: NullHandling,
71}
72
73#[derive(Debug, Clone, PartialEq)]
75pub enum SortDirection {
76 Ascending,
77 Descending,
78}
79
80#[derive(Debug, Clone, PartialEq)]
82pub enum NullHandling {
83 First,
84 Last,
85}