pub enum Expr {
Show 19 variants
Field(String),
Str(String),
I64(i64),
F64(f64),
Bool(bool),
Null,
Array(Vec<Expr>),
FuncCall(String, Vec<Expr>),
MethodCall(String, Box<Expr>, Vec<Expr>),
Gt(Box<Expr>, Box<Expr>),
Lt(Box<Expr>, Box<Expr>),
Ge(Box<Expr>, Box<Expr>),
Le(Box<Expr>, Box<Expr>),
Eq(Box<Expr>, Box<Expr>),
Ne(Box<Expr>, Box<Expr>),
In(Box<Expr>, Box<Expr>),
And(Vec<Expr>),
Or(Vec<Expr>),
Not(Box<Expr>),
}Expand description
The expression.
It is an AST of the filter expression.
Variants§
Field(String)
Str(String)
I64(i64)
F64(f64)
Bool(bool)
Null
Array(Vec<Expr>)
FuncCall(String, Vec<Expr>)
MethodCall(String, Box<Expr>, Vec<Expr>)
Gt(Box<Expr>, Box<Expr>)
Lt(Box<Expr>, Box<Expr>)
Ge(Box<Expr>, Box<Expr>)
Le(Box<Expr>, Box<Expr>)
Eq(Box<Expr>, Box<Expr>)
Ne(Box<Expr>, Box<Expr>)
In(Box<Expr>, Box<Expr>)
And(Vec<Expr>)
Or(Vec<Expr>)
Not(Box<Expr>)
Implementations§
Source§impl Expr
impl Expr
pub fn field_<T: Into<String>>(field: T) -> Self
pub fn str_<T: Into<String>>(value: T) -> Self
pub fn i64_<T: Into<i64>>(value: T) -> Self
pub fn f64_<T: Into<f64>>(value: T) -> Self
pub fn bool_<T: Into<bool>>(value: T) -> Self
pub fn null_() -> Self
pub fn array_<T: Into<Vec<Expr>>>(value: T) -> Self
pub fn func_call_(func: impl Into<String>, args: Vec<Expr>) -> Self
pub fn method_call_( obj: Expr, method: impl Into<String>, args: Vec<Expr>, ) -> Self
pub fn gt_(left: Expr, right: Expr) -> Self
pub fn lt_(left: Expr, right: Expr) -> Self
pub fn ge_(left: Expr, right: Expr) -> Self
pub fn le_(left: Expr, right: Expr) -> Self
pub fn eq_(left: Expr, right: Expr) -> Self
pub fn ne_(left: Expr, right: Expr) -> Self
pub fn in_(left: Expr, right: Expr) -> Self
pub fn and_<T: Into<Vec<Expr>>>(value: T) -> Self
pub fn or_<T: Into<Vec<Expr>>>(value: T) -> Self
pub fn not_(self) -> Self
Source§impl Expr
impl Expr
Sourcepub async fn transform<F: Transform>(
self,
transformer: &mut F,
) -> Result<Expr, Error>
pub async fn transform<F: Transform>( self, transformer: &mut F, ) -> Result<Expr, Error>
Recursively transform an expression using the provided transformer.
use filter_expr::{Expr, Transform};
use async_trait::async_trait;
struct MyTransformer;
#[async_trait]
impl Transform for MyTransformer {
async fn transform(&mut self, expr: Expr) -> Result<Expr, filter_expr::Error> {
// Transform the expression before recursing
Ok(match expr {
Expr::Field(name) if name == "old_name" => {
Expr::Field("new_name".to_string())
}
other => other,
})
}
}
let expr = Expr::Field("old_name".to_string());
let mut transformer = MyTransformer;
let result = expr.transform(&mut transformer).await.unwrap();
assert_eq!(result, Expr::Field("new_name".to_string()));Trait Implementations§
Source§impl Ord for Expr
impl Ord for Expr
Source§impl PartialOrd for Expr
impl PartialOrd for Expr
impl Eq for Expr
Auto Trait Implementations§
impl Freeze for Expr
impl RefUnwindSafe for Expr
impl Send for Expr
impl Sync for Expr
impl Unpin for Expr
impl UnwindSafe for Expr
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more