7个版本 (3个稳定版本)
1.0.2 | 2024年7月31日 |
---|---|
1.0.1 | 2024年7月21日 |
1.0.0 | 2024年4月22日 |
0.11.2 | 2024年4月17日 |
0.7.2 | 2024年1月11日 |
#200 在 WebAssembly
每月下载量 285次
250KB
6.5K SLoC
RsCel是用Rust编写的CEL评估器。CEL是谷歌的一个项目,描述了一种图灵不完整语言,可以用来评估用户提供的表达式。语言规范可以在这里找到。
此项目的目标设计如下
- 足够灵活,以便用户在需要时可以调整规范
- 沙箱化,以便只能绑定特定值
- 可以作为wasm依赖项(或其他ffi)使用
基本使用示例
use rscel::{CelContext, BindContext, serde_json};
let mut ctx = CelContext::new();
let mut exec_ctx = BindContext::new();
ctx.add_program_str("main", "foo + 3").unwrap();
exec_ctx.bind_param("foo", 3.into()); // 3 converted to CelValue
let res = ctx.exec("main", &exec_ctx).unwrap(); // CelValue::Int(6)
assert_eq!(res, 6.into());
从0.10.0版本开始,现在可以通过protobuf crate绑定protobuf消息!给定以下protobuf消息
message Point {
int32 x = 1;
int32 y = 2;
}
以下代码可以用来评估Point消息上的CEL表达式
use rscel::{CelContext, BindContext};
// currently rscel required protobuf messages to be in a box
let p = Box::new(protos::Point::new());
p.x = 4;
p.y = 5;
let mut ctx = CelContext::new();
let mut exec_ctx = BindContext::new();
ctx.add_program_str("main", "p.x + 3").unwrap();
exec_ctx.bind_protobuf_msg("p", p);
assert_eq!(ctx.exec("main", &exec_ctx).unwrap(), 7.into());
依赖项
~8–13MB
~207K SLoC