6 releases

0.1.5 Nov 27, 2024
0.1.4 Jul 24, 2024
0.1.3 Jun 7, 2022
0.1.2 May 30, 2022

#446 in Parser implementations

Download history 9/week @ 2024-09-13 8/week @ 2024-09-20 3/week @ 2024-09-27 2/week @ 2024-10-04 106/week @ 2024-11-22 22/week @ 2024-11-29

128 downloads per month

MIT/Apache

455KB
13K SLoC

evaluator_rs

Build codecov License:MIT

A evaluation engine library for Rust.

Usage

Please see the Documentation for more details.

Add to your Cargo.toml:

[dependencies]
evaluator_rs = "0.1"

Examples:

extern crate evaluator_rs;

use std::collections::HashMap;

use evaluator_rs::{evaluate, parse_expr_from_str, parse_expr_from_json, Value};

fn main() {
    // from str expression
    let expr = parse_expr_from_str("{a} + 2 + 3").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(6));

    let expr = parse_expr_from_str("{a} in [1, 2 , 3]").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));

    // from json expression
    let json_expr = r#"{
        "lhs": "{a}",
        "op": "in",
        "rhs": [4, 5, 6] 
    }"#;
    let expr = parse_expr_from_json(json_expr).unwrap();
    let parameters = HashMap::from([("a", Value::from(4))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));
}

Data types

Type Examples
Number 1
String 'hello world'
Bool true
Array [1, 2, 3]

Supported operators

Operator Precedence Description
&& 1 And
|| 1 Or
== 2 Equal
> 2 Greater than
>= 2 Greater than or equal
< 2 Lower than
<= 2 Lower than or equal
in 2 Array contains
* 3 Product
/ 3 Division
+ 4 Sum
- 4 Sub

Identifier

Identifiers are wrapped by curly brace. When expression is evaluated, parameters must be provided identifier value.

Examples:

    let expr = parse_expr("{a} in [1, 2 , 3]").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));

License

Dependencies

~3.5–6.5MB
~114K SLoC