Crates.io | snitch-detective |
lib.rs | snitch-detective |
version | 0.0.26 |
source | src |
created_at | 2023-06-30 04:34:38.290508 |
updated_at | 2023-09-18 22:32:04.779874 |
description | Data matcher library used by snitch WASM functions |
homepage | |
repository | https://github.com/streamdal/snitch-detective |
max_upload_size | |
id | 904098 |
size | 89,505 |
Rust helper lib for performing value matching in snitch
WASM functions.
For available matchers, look at the enums listed in 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),
}
}
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
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
.