#protobuf #json #match

nightly snitch-detective

snitch WASM 函数使用的数据匹配库

24 个版本

0.0.26 2023 年 9 月 18 日
0.0.25 2023 年 9 月 11 日
0.0.21 2023 年 8 月 26 日
0.0.19 2023 年 7 月 27 日
0.0.3 2023 年 6 月 30 日

#561WebAssembly

Download history 353/week @ 2024-03-14 21/week @ 2024-03-21 5/week @ 2024-03-28 1/week @ 2024-04-04

每月 241 次下载

MIT 许可证

70KB
1.5K SLoC

snitch-detective

Release Test

Rust 辅助库,用于在 snitch WASM 函数中执行值匹配。

有关可用匹配器,请参阅 snitch-protos 中列出的枚举。

安装

cargo add snitch-protos
cargo add snitch-detective

用法

fn main() {
    let det = detective::Detective::new();

    let sample_json = r#"{
        "field1": {
            "field2": "2"
        }
    }"#;

    let request = Request {
        match_type: DetectiveType::DETECTIVE_TYPE_HAS_FIELD,
        data: &sample_json.as_bytes().to_vec(),
        path: "field1".to_string(),
        args: vec!["1".to_string()],
        negate: false,
    };

    match det.matches(&request) {
        Ok(value) => println!("Result: {:#?}", value),
        Err(err) => println!("Error: {:#?}", err),
    }
}

关于正则表达式的说明

基于正则表达式的匹配器目前速度较慢,因为我们必须在每次调用时编译模式。

当我们在 SDK 中实现 K/V 功能时,这将得到改善。

想法是 WASM 函数将获得在缓存中 GET/PUT 项的能力,因此 detective 将连接到接受一个允许与缓存函数一起工作的 trait 的参数。

如果将 K/V trait 提供给 detective - 在编译正则表达式模式之前,它会首先检查缓存是否已包含它。如果是,则使用它;如果不是,则编译并将其放入缓存。

~DS 06-29-2023

开发

必须使用 Rust nightly(因为我们使用 #![feature(test)] 来启用基准测试功能)来测试库。

要安装 nightly:rustup install nightly

要使用 nightly 运行测试:cargo +nightly test

要使用 nightly 运行基准测试:cargo +nightly bench

您还可以使用 rustup default nightly 将 nightly 设置为默认。

依赖项

~13MB
~215K SLoC