evaluator_rs

Crates.ioevaluator_rs
lib.rsevaluator_rs
version0.1.3
sourcesrc
created_at2022-05-30 17:45:50.078589
updated_at2022-06-07 01:59:44.856764
descriptionA evaluation engine library for Rust
homepagehttps://github.com/tuyentv96/evaluator_rs
repositoryhttps://github.com/tuyentv96/evaluator_rs.git
max_upload_size
id597093
size474,467
(tuyentv96)

documentation

https://docs.rs/evaluator_rs

README

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

Commit count: 58

cargo fmt