5 releases
0.1.4 | Jul 24, 2024 |
---|---|
0.1.3 | Jun 7, 2022 |
0.1.2 | May 30, 2022 |
0.1.1 | May 30, 2022 |
0.1.0 | May 30, 2022 |
#558 in Parser implementations
455KB
13K
SLoC
evaluator_rs
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, ¶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));
}
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, ¶meters).unwrap();
assert_eq!(rs, Value::from(true));
License
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
Dependencies
~3.5–6.5MB
~114K SLoC