#json #matcher #regex #streamson #data #strategy #arc-mutex

streamson-extra-matchers

streamson库的额外匹配器

9个稳定版本

6.3.1 2020年12月8日
6.3.0 2020年12月5日
6.2.0 2020年11月12日
6.1.0 2020年10月23日
4.1.0 2020年8月29日

#2278 in 解析器实现

MIT 协议

240KB
5.5K SLoC

docs.rs

Streamson额外匹配器

一个包含streamson-lib额外匹配器的库。请注意,此库可能包含额外的依赖项。

匹配器

正则表达式

基于正则表达式匹配路径。

示例

use streamson_lib::{handler, strategy};
use streamson_extra_matchers::Regex;

use std::{str::FromStr, sync::{Arc, Mutex}};

let handler = Arc::new(Mutex::new(handler::PrintLn::new()));
let matcher = Regex::from_str(r#"\{"[Uu]ser"\}\[\]"#).unwrap();

let mut trigger = strategy::Trigger::new();

trigger.add_matcher(
    Box::new(matcher),
    &[handler],
);

for input in vec![
    br#"{"Users": [1,2]"#.to_vec(),
    br#", "users": [3, 4]}"#.to_vec(),
] {
    trigger.process(&input).unwrap();
}

转换器

RegexConverter

基于正则表达式转换数据。

示例

use streamson_lib::{matcher, strategy};
use std::sync::{Arc, Mutex};
use regex;
use streamson_extra_matchers::RegexConverter;
let converter =
Arc::new(Mutex::new(RegexConverter::new().add_regex(regex::Regex::new("User").unwrap(), "user".to_string(), 0)));
let matcher = matcher::Simple::new(r#"{"users"}[]{"name"}"#).unwrap();
let mut convert = strategy::Convert::new();
// Set the matcher for convert strategy
convert.add_matcher(Box::new(matcher), vec![converter]);
for input in vec![
    br#"{"users": [{"password": "1234", "name": "User1"}, {"#.to_vec(),
    br#""password": "0000", "name": "user2}]}"#.to_vec(),
] {
    for converted_data in convert.process(&input).unwrap() {
        println!("{:?} (len {})", converted_data, converted_data.len());
    }
}

依赖项

~0–500KB