1个不稳定版本
0.1.0 | 2023年8月18日 |
---|
#207 in 解析工具
40KB
932 行
coolrule
布尔表达式评估引擎(boolrule的Rust移植版本)。
// Without context
let expr = coolrule::new("1 in (1, 2, 3) or 2 > 3")?;
let test = expr.test()?; // true
// With context
let expr = coolrule::new("x ∉ (5, 6, 7)")?;
let test = expr.test_with_context(
HashMap::from([(vec!["x"], Value::Number(8.0))])
)?; // true
boolrule测试套件也已移植(并通过测试),请参阅 lib.rs
。
表达式通过PEG解析器组合器(由pom提供动力)进行解析。
它的速度大约是Python版本的3倍(在优化工作之前)。
我仍在学习如何编写地道的Rust,如果您看到任何奇怪的地方,请告诉我!
测试
cargotest
lib.rs
:
boolrule的Rust移植版本。
这个库可以评估布尔表达式。
使用方法
要使用此库,您需要通过解析布尔表达式字符串创建一个 CoolRule
实例。该库支持评估包含各种运算符的布尔表达式,例如 and
、or
、not
、比较和集合成员检查。表达式可以带有或没有上下文进行评估,其中上下文为表达式中的变量提供值。
示例
无上下文创建和测试表达式
let expr = coolrule::new("1 > 2 and 3 <= 5").unwrap();
let result = expr.test().unwrap(); // false
有上下文创建和测试表达式
use coolrule::{Value};
use std::collections::HashMap;
let expr = coolrule::new("x == 5").unwrap();
let mut context = HashMap::new();
context.insert(vec!["x"], Value::Number(5.0));
let result = expr.test_with_context(&context).unwrap(); // true
依赖项
~1MB
~11K SLoC