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
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 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 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
Equivalent to: start1 < end2 && start2 < end1
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