#protobuf #json #match

nightly snitch-detective

Data matcher library used by snitch WASM functions

24 releases

0.0.26 Sep 18, 2023
0.0.25 Sep 11, 2023
0.0.21 Aug 26, 2023
0.0.19 Jul 27, 2023
0.0.3 Jun 30, 2023

#493 in WebAssembly

Download history 43/week @ 2024-02-25 2/week @ 2024-03-10 365/week @ 2024-03-17 7/week @ 2024-03-24 205/week @ 2024-03-31

579 downloads per month

MIT license

70KB
1.5K SLoC

snitch-detective

Release Test

Rust helper lib for performing value matching in snitch WASM functions.

For available matchers, look at the enums listed in snitch-protos.

Install

cargo add snitch-protos
cargo add snitch-detective

Usage

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),
    }
}

Note on regex

Regex-based matchers are currently slow because we have to compile the pattern on every call.

This will improve when we implement K/V functionality in SDK's.

The idea is that WASM funcs will be given the ability to GET/PUT items in cache, so detective would be wired up to accept a param that is a trait that allows working with the cache funcs.

If K/V trait is provided to detective - before compiling a regex pattern, it would first check if the cache already contains it. If yes, it'll use that, if not, it'll compile and put it in the cache.

~DS 06-29-2023

Development

The library must be tested using Rust nightly (because we use #![feature(test)] to enable the ability to bench).

To install nightly: rustup install nightly

To run tests using nightly: cargo +nightly test

To run benches using nightly: cargo +nightly bench

You can also set nightly as default using rustup default nightly.

Dependencies

~14MB
~226K SLoC