Skip to content

tuyentv96/evaluator_rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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