pub enum Expression {
Show 23 variants
IntLiteral {
value: i64,
},
BoolLiteral {
value: bool,
},
Null,
Param {
index: u32,
},
FieldAccess {
object: Box<Expression>,
class_name: String,
field_name: String,
},
Eq {
left: Box<Expression>,
right: Box<Expression>,
},
Ne {
left: Box<Expression>,
right: Box<Expression>,
},
Lt {
left: Box<Expression>,
right: Box<Expression>,
},
Le {
left: Box<Expression>,
right: Box<Expression>,
},
Gt {
left: Box<Expression>,
right: Box<Expression>,
},
Ge {
left: Box<Expression>,
right: Box<Expression>,
},
And {
left: Box<Expression>,
right: Box<Expression>,
},
Or {
left: Box<Expression>,
right: Box<Expression>,
},
Not {
operand: Box<Expression>,
},
IsNull {
operand: Box<Expression>,
},
IsNotNull {
operand: Box<Expression>,
},
Add {
left: Box<Expression>,
right: Box<Expression>,
},
Sub {
left: Box<Expression>,
right: Box<Expression>,
},
Mul {
left: Box<Expression>,
right: Box<Expression>,
},
Div {
left: Box<Expression>,
right: Box<Expression>,
},
ListContains {
list: Box<Expression>,
element: Box<Expression>,
},
HostCall {
function_name: String,
args: Vec<Expression>,
},
IfThenElse {
condition: Box<Expression>,
then_branch: Box<Expression>,
else_branch: Box<Expression>,
},
}Expand description
Rich expression tree for constraint predicates
This enum represents a complete expression language for building constraint predicates. Expressions are serializable (via serde) for use across FFI boundaries.
§Example
// Build expression: param(0).employee != null
let expr = Expression::IsNotNull {
operand: Box::new(Expression::FieldAccess {
object: Box::new(Expression::Param { index: 0 }),
class_name: "Shift".into(),
field_name: "employee".into(),
})
};Variants§
IntLiteral
Integer literal (i64)
BoolLiteral
Boolean literal
Null
Null value
Param
Access a function parameter by index Example: param(0) refers to the first parameter
FieldAccess
Access a field on an object Example: param(0).get(“Employee”, “name”)
Eq
Equal comparison (==)
Ne
Not equal comparison (!=)
Lt
Less than comparison (<)
Le
Less than or equal comparison (<=)
Gt
Greater than comparison (>)
Ge
Greater than or equal comparison (>=)
And
Logical AND (&&)
Or
Logical OR (||)
Not
Logical NOT (!)
Fields
operand: Box<Expression>IsNull
Null check (is null)
Fields
operand: Box<Expression>IsNotNull
Not-null check (is not null)
Fields
operand: Box<Expression>Add
Addition (+)
Sub
Subtraction (-)
Mul
Multiplication (*)
Div
Division (/)
ListContains
Check if a list contains an element Example: list.contains(element)
HostCall
Call a host-provided function Example: hstringEquals(left, right)
IfThenElse
If-then-else conditional expression Example: if condition { then_branch } else { else_branch }
Trait Implementations§
Source§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Expression
impl Debug for Expression
Source§impl<'de> Deserialize<'de> for Expression
impl<'de> Deserialize<'de> for Expression
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl FieldAccessExt for Expression
impl FieldAccessExt for Expression
Source§impl PartialEq for Expression
impl PartialEq for Expression
Source§impl Serialize for Expression
impl Serialize for Expression
impl StructuralPartialEq for Expression
Auto Trait Implementations§
impl Freeze for Expression
impl RefUnwindSafe for Expression
impl Send for Expression
impl Sync for Expression
impl Unpin for Expression
impl UnwindSafe for Expression
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)