Crate rets_expression

source ·
Expand description

An implementation of RCP 19 (RETS Validation Expressions) from the RESO Transport group.

§Example

use rets_expression::{Expression, Engine, EvaluateContext};
use serde_json::json;

// Parse an expression
let expression = "MlsStatus .IN. ('Active', 'Pending') .AND. (ListPrice >= 1 .OR. LAST MlsStatus = 'Incomplete')"
    .parse::<Expression>()
    .unwrap();

// Create the property data to run the expression against
let value = json!({
    "MlsStatus": "Active",
    "ListPrice": 1000000
});
// Create the previous property data to run the expression against (for when the expression
// includes references to previous data, like `LAST FieldName`)
let previous_value = json!({
    "MlsStatus": "Incomplete",
    "ListPrice": 0
});

// Create a default engine and a context in which to evaluate the expression
let engine = Engine::default();
let context = EvaluateContext::new(&engine, &value).with_previous(&previous_value);

// Evaluate the expression!
let value = expression.apply(context).unwrap();
assert_eq!(value.into_owned(), json!(true));

Modules§

Structs§

  • A node representing the logical conjunction of two or more expressions
  • Global context for how to evaluate an expression
  • The information required to evaluate an expression
  • A node representing a reference to a field
  • A node representing a function call
  • A node representing the special IIF conditional syntax
  • A node representing a reference to a field from the previous value
  • A node representing a list of items
  • A node representing a literal value
  • A node representing the logical negation of an expression
  • A node representing a binary operation
  • A node representing the logical disjunction of two or more expressions

Enums§

Traits§