#validation #expression #reso #expression-parser #rets #rcp19

no-std rets_expression

Implementation of RETS Validation Expressions from RESO RCP19

4 releases

0.2.1 Sep 22, 2024
0.2.0 Sep 6, 2024
0.1.1 Jul 20, 2023
0.1.0 Jul 14, 2023

#266 in Testing

Download history 1180/week @ 2024-06-15 1195/week @ 2024-06-22 671/week @ 2024-06-29 1435/week @ 2024-07-06 849/week @ 2024-07-13 1266/week @ 2024-07-20 1370/week @ 2024-07-27 556/week @ 2024-08-03 865/week @ 2024-08-10 608/week @ 2024-08-17 746/week @ 2024-08-24 574/week @ 2024-08-31 839/week @ 2024-09-07 511/week @ 2024-09-14 869/week @ 2024-09-21 731/week @ 2024-09-28

3,226 downloads per month

MIT license

125KB
3K SLoC

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

See the docs for usage.

This repo tests against the compliance tests at https://github.com/zenlist/reso-rcp19-compliance-tests


lib.rs:

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));

Dependencies

~4–10MB
~97K SLoC