#match #json #protobuf

nightly streamdal-wasm-detective

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

13 个版本

0.0.39 2024年1月5日
0.0.38 2024年1月3日
0.0.36 2023年12月6日
0.0.34 2023年11月20日
0.0.31 2023年10月21日

#125 in #match

Download history 13/week @ 2024-03-12 3/week @ 2024-03-19 45/week @ 2024-03-26 3/week @ 2024-04-02

每月165次下载

MIT 许可证

95KB
2.5K SLoC

wasm-detective

Release Test

Rust 辅助库,用于在 streamdal/wasm Wasm 函数中执行值匹配。

有关可用匹配器的信息,请参阅 streamdal/protos 中的枚举。

安装

cargo add streamdal-protos
cargo add streamdal-wasm-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 的参数。

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

~DS 06-29-2023

开发

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

要安装 nightly: rustup install nightly

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

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

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

发布

在 libs/wasm-detective 下进行的任何更改都将自动发布到 crates.io,并进行版本升级

基准测试

截至 2023-11-14 有效

test test_bench::bench_credit_card         ... bench:         730 ns/iter (+/- 8)
test test_bench::bench_credit_card_payload ... bench:       7,821 ns/iter (+/- 90)
test test_bench::bench_email               ... bench:         531 ns/iter (+/- 8)
test test_bench::bench_email_payload       ... bench:       6,150 ns/iter (+/- 78)
test test_bench::bench_email_utf8          ... bench:         907 ns/iter (+/- 9)
test test_bench::bench_has_field           ... bench:         386 ns/iter (+/- 11)
test test_bench::bench_hostname            ... bench:         410 ns/iter (+/- 6)
test test_bench::bench_ipv4_address        ... bench:         213 ns/iter (+/- 3)
test test_bench::bench_ipv6_address        ... bench:         320 ns/iter (+/- 2)
test test_bench::bench_mac_address         ... bench:         343 ns/iter (+/- 7)
test test_bench::bench_semver              ... bench:         378 ns/iter (+/- 6)
test test_bench::bench_string_contains_all ... bench:         218 ns/iter (+/- 4)
test test_bench::bench_string_contains_any ... bench:         221 ns/iter (+/- 1)
test test_bench::bench_uuid                ... bench:         402 ns/iter (+/- 6)

依赖项

~14MB
~224K SLoC