use serde_json::Value;
#[derive(Debug, Clone, PartialEq)]
pub enum Expression {
Number(f64),
String(String),
Boolean(bool),
Null,
Field(Vec<String>), Index(Box<Expression>, Box<Expression>), ArrayWildcard(Box<Expression>, Vec<String>),
Equal(Box<Expression>, Box<Expression>),
NotEqual(Box<Expression>, Box<Expression>),
GreaterThan(Box<Expression>, Box<Expression>),
LessThan(Box<Expression>, Box<Expression>),
GreaterEqual(Box<Expression>, Box<Expression>),
LessEqual(Box<Expression>, Box<Expression>),
And(Box<Expression>, Box<Expression>),
Or(Box<Expression>, Box<Expression>),
Not(Box<Expression>),
Contains(Box<Expression>, Box<Expression>),
StartsWith(Box<Expression>, Box<Expression>),
EndsWith(Box<Expression>, Box<Expression>),
Matches(Box<Expression>, Box<Expression>),
IsNull(Box<Expression>),
IsNotNull(Box<Expression>),
IsNumber(Box<Expression>),
IsString(Box<Expression>),
IsBool(Box<Expression>),
IsArray(Box<Expression>),
IsObject(Box<Expression>),
Length(Box<Expression>),
Sum(Box<Expression>),
Count(Box<Expression>),
Min(Box<Expression>),
Max(Box<Expression>),
Avg(Box<Expression>),
In(Box<Expression>, Vec<Value>),
Variable(String), }
#[derive(Debug, Clone)]
pub struct SortKey {
pub expression: Expression,
pub direction: SortDirection,
pub null_handling: NullHandling,
}
#[derive(Debug, Clone, PartialEq)]
pub enum SortDirection {
Ascending,
Descending,
}
#[derive(Debug, Clone, PartialEq)]
pub enum NullHandling {
First,
Last,
}