pub struct Expr;Expand description
Fluent builder for constructing expression trees
Provides a convenient API for building complex expressions without excessive nesting of Box::new() calls.
§Example
use solverforge_core::wasm::{Expression, Expr};
use solverforge_core::wasm::FieldAccessExt;
// Build: param(0).employee != null
let shift = Expr::param(0);
let employee = shift.get("Shift", "employee");
let predicate = Expr::is_not_null(employee);Implementations§
Source§impl Expr
impl Expr
Sourcepub fn int(value: i64) -> Expression
pub fn int(value: i64) -> Expression
Create an integer literal (compiles to i32)
Sourcepub fn int64(value: i64) -> Expression
pub fn int64(value: i64) -> Expression
Create a 64-bit integer literal (compiles directly to i64) Use for datetime arithmetic and other i64 operations.
Sourcepub fn bool(value: bool) -> Expression
pub fn bool(value: bool) -> Expression
Create a boolean literal
Sourcepub fn null() -> Expression
pub fn null() -> Expression
Create a null literal
Sourcepub fn param(index: u32) -> Expression
pub fn param(index: u32) -> Expression
Access a function parameter by index
Sourcepub fn eq(left: Expression, right: Expression) -> Expression
pub fn eq(left: Expression, right: Expression) -> Expression
Equal comparison (==)
Sourcepub fn ne(left: Expression, right: Expression) -> Expression
pub fn ne(left: Expression, right: Expression) -> Expression
Not equal comparison (!=)
Sourcepub fn lt(left: Expression, right: Expression) -> Expression
pub fn lt(left: Expression, right: Expression) -> Expression
Less than comparison (<)
Sourcepub fn le(left: Expression, right: Expression) -> Expression
pub fn le(left: Expression, right: Expression) -> Expression
Less than or equal comparison (<=)
Sourcepub fn gt(left: Expression, right: Expression) -> Expression
pub fn gt(left: Expression, right: Expression) -> Expression
Greater than comparison (>)
Sourcepub fn ge(left: Expression, right: Expression) -> Expression
pub fn ge(left: Expression, right: Expression) -> Expression
Greater than or equal comparison (>=)
Sourcepub fn eq64(left: Expression, right: Expression) -> Expression
pub fn eq64(left: Expression, right: Expression) -> Expression
Equal comparison for i64 (==)
Sourcepub fn ne64(left: Expression, right: Expression) -> Expression
pub fn ne64(left: Expression, right: Expression) -> Expression
Not equal comparison for i64 (!=)
Sourcepub fn lt64(left: Expression, right: Expression) -> Expression
pub fn lt64(left: Expression, right: Expression) -> Expression
Less than comparison for i64 (<)
Sourcepub fn le64(left: Expression, right: Expression) -> Expression
pub fn le64(left: Expression, right: Expression) -> Expression
Less than or equal comparison for i64 (<=)
Sourcepub fn gt64(left: Expression, right: Expression) -> Expression
pub fn gt64(left: Expression, right: Expression) -> Expression
Greater than comparison for i64 (>)
Sourcepub fn ge64(left: Expression, right: Expression) -> Expression
pub fn ge64(left: Expression, right: Expression) -> Expression
Greater than or equal comparison for i64 (>=)
Sourcepub fn and(left: Expression, right: Expression) -> Expression
pub fn and(left: Expression, right: Expression) -> Expression
Logical AND (&&)
Sourcepub fn or(left: Expression, right: Expression) -> Expression
pub fn or(left: Expression, right: Expression) -> Expression
Logical OR (||)
Sourcepub fn not(operand: Expression) -> Expression
pub fn not(operand: Expression) -> Expression
Logical NOT (!)
Sourcepub fn is_null(operand: Expression) -> Expression
pub fn is_null(operand: Expression) -> Expression
Null check (is null)
Sourcepub fn is_not_null(operand: Expression) -> Expression
pub fn is_not_null(operand: Expression) -> Expression
Not-null check (is not null)
Sourcepub fn add(left: Expression, right: Expression) -> Expression
pub fn add(left: Expression, right: Expression) -> Expression
Addition (+)
Sourcepub fn sub(left: Expression, right: Expression) -> Expression
pub fn sub(left: Expression, right: Expression) -> Expression
Subtraction (-)
Sourcepub fn mul(left: Expression, right: Expression) -> Expression
pub fn mul(left: Expression, right: Expression) -> Expression
Multiplication (*)
Sourcepub fn div(left: Expression, right: Expression) -> Expression
pub fn div(left: Expression, right: Expression) -> Expression
Division (/)
Sourcepub fn add64(left: Expression, right: Expression) -> Expression
pub fn add64(left: Expression, right: Expression) -> Expression
Addition for i64 (+)
Sourcepub fn sub64(left: Expression, right: Expression) -> Expression
pub fn sub64(left: Expression, right: Expression) -> Expression
Subtraction for i64 (-)
Sourcepub fn mul64(left: Expression, right: Expression) -> Expression
pub fn mul64(left: Expression, right: Expression) -> Expression
Multiplication for i64 (*)
Sourcepub fn div64(left: Expression, right: Expression) -> Expression
pub fn div64(left: Expression, right: Expression) -> Expression
Division for i64 (/)
Sourcepub fn host_call(
function_name: impl Into<String>,
args: Vec<Expression>,
) -> Expression
pub fn host_call( function_name: impl Into<String>, args: Vec<Expression>, ) -> Expression
Call a host function
Sourcepub fn list_contains(list: Expression, element: Expression) -> Expression
pub fn list_contains(list: Expression, element: Expression) -> Expression
Check if a list contains an element
Generates a loop that iterates through the list and checks for equality. Returns true if the element is found, false otherwise.
Sourcepub fn string_equals(left: Expression, right: Expression) -> Expression
pub fn string_equals(left: Expression, right: Expression) -> Expression
String equality via host function
Equivalent to: hstringEquals(left, right)
Sourcepub fn ranges_overlap(
start1: Expression,
end1: Expression,
start2: Expression,
end2: Expression,
) -> Expression
pub fn ranges_overlap( start1: Expression, end1: Expression, start2: Expression, end2: Expression, ) -> Expression
Check if two time ranges overlap (i32 version)
Equivalent to: start1 < end2 && start2 < end1
Sourcepub fn ranges_overlap64(
start1: Expression,
end1: Expression,
start2: Expression,
end2: Expression,
) -> Expression
pub fn ranges_overlap64( start1: Expression, end1: Expression, start2: Expression, end2: Expression, ) -> Expression
Check if two time ranges overlap (i64 version for datetime)
Equivalent to: start1 < end2 && start2 < end1 Use this for datetime fields stored as i64.
Sourcepub fn if_then_else(
condition: Expression,
then_branch: Expression,
else_branch: Expression,
) -> Expression
pub fn if_then_else( condition: Expression, then_branch: Expression, else_branch: Expression, ) -> Expression
If-then-else conditional expression (produces i32)
Sourcepub fn if_then_else64(
condition: Expression,
then_branch: Expression,
else_branch: Expression,
) -> Expression
pub fn if_then_else64( condition: Expression, then_branch: Expression, else_branch: Expression, ) -> Expression
If-then-else conditional expression (produces i64) Use for datetime arithmetic where branches return i64 values.
Sourcepub fn i64_to_i32(operand: Expression) -> Expression
pub fn i64_to_i32(operand: Expression) -> Expression
Wrap i64 to i32 (truncate) Use to convert i64 arithmetic results to i32 for final comparisons.
Sourcepub fn i32_to_i64(operand: Expression) -> Expression
pub fn i32_to_i64(operand: Expression) -> Expression
Extend i32 to i64 (signed) Use to convert i32 values (like date epoch days) to i64 for datetime arithmetic.