use simd_json::OwnedValue as Value;
use super::builtins::Builtin;
#[derive(Debug, Clone, PartialEq)]
pub enum ObjectKey {
Static(String), Dynamic(Box<Filter>), }
#[derive(Debug, Clone, PartialEq)]
pub enum FunctionCall {
Map(Box<Filter>),
Select(Box<Filter>),
SortBy(Box<Filter>),
GroupBy(Box<Filter>),
UniqueBy(Box<Filter>),
MinBy(Box<Filter>),
MaxBy(Box<Filter>),
Has(String), Split(String), Join(String), StartsWith(String), EndsWith(String), Contains(Box<Filter>), WithEntries(Box<Filter>), }
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum CompareOp {
Eq, Ne, Lt, Le, Gt, Ge, }
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum BoolOp {
And,
Or,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Filter {
Identity,
Field(String),
Index(i64),
Slice(Option<i64>, Option<i64>), Iterate,
Optional(Box<Filter>), Pipe(Box<Filter>, Box<Filter>),
Builtin(Builtin),
Function(FunctionCall), Literal(Value), Compare(Box<Filter>, CompareOp, Box<Filter>), BoolOp(Box<Filter>, BoolOp, Box<Filter>), Array(Vec<Filter>), Object(Vec<(ObjectKey, Filter)>), IfThenElse {
condition: Box<Filter>,
then_branch: Box<Filter>,
else_branch: Box<Filter>,
},
Alternative(Box<Filter>, Box<Filter>), }