1个不稳定版本

0.1.0 2023年8月18日

#207 in 解析工具

MIT 许可证

40KB
932

Rust

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 实例。该库支持评估包含各种运算符的布尔表达式,例如 andornot、比较和集合成员检查。表达式可以带有或没有上下文进行评估,其中上下文为表达式中的变量提供值。

示例

无上下文创建和测试表达式

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