| Crates.io | evaluator_rs |
| lib.rs | evaluator_rs |
| version | 0.1.5 |
| created_at | 2022-05-30 17:45:50.078589+00 |
| updated_at | 2024-11-27 16:41:21.303311+00 |
| description | A evaluation engine library for Rust |
| homepage | https://github.com/tuyentv96/evaluator_rs |
| repository | https://github.com/tuyentv96/evaluator_rs.git |
| max_upload_size | |
| id | 597093 |
| size | 477,118 |
A evaluation engine library for Rust.
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, ¶meters).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, ¶meters).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, ¶meters).unwrap();
assert_eq!(rs, Value::from(true));
}
| Type | Examples |
|---|---|
| Number | 1 |
| String | 'hello world' |
| Bool | true |
| Array | [1, 2, 3] |
| 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 |
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, ¶meters).unwrap();
assert_eq!(rs, Value::from(true));