3 个版本
0.1.2 | 2021 年 12 月 28 日 |
---|---|
0.1.1 | 2019 年 4 月 21 日 |
0.1.0 | 2019 年 4 月 14 日 |
在 解析器实现 中排名 #1007
每月下载量 734
在 7 个 crate 中使用 (直接使用 4 个)
15KB
338 行
recap
将命名的捕获组反序列化为类型安全的结构体
Recap 提供了与 envy 为环境变量提供的类似功能,针对命名捕获组。命名正则表达式捕获组与其他正则表达式捕获组类似,但具有额外的属性,即它们与名称相关联。例如 (?P<name-of-capture-group>some-pattern)
🤔 这适合谁
您可能发现这个 crate 对以下情况很有用:您的应用程序需要从第三方提供的具有松散结构的格式字符串输入中提取信息。
这种情况的一个常见用例是,当您处理日志文件数据时,这些数据不是存储在特定的结构化格式(如 JSON)中,而是以模式表示的格式。
您也可能发现它对解析其他松散格式化数据模式很有用。
对于以更结构化格式(如 JSON)提供输入的情况,此 crate 可能不太合适。我建议在这些情况下使用类似 serde-json
的 crate。
📦 安装
将以下内容添加到您的 Cargo.toml
文件中。
[dependencies]
recap = "0.1"
🤸 使用
典型的 recap 使用方法如下。假设您的 Rust 程序看起来像这样...
💡 这些示例使用 Serde 的 derive 功能
use recap::Recap;
use serde::Deserialize;
use std::error::Error;
#[derive(Debug, Deserialize, Recap)]
#[recap(regex = r#"(?x)
(?P<foo>\d+)
\s+
(?P<bar>true|false)
\s+
(?P<baz>\S+)
"#)]
struct LogEntry {
foo: usize,
bar: bool,
baz: String,
}
fn main() -> Result<(), Box<dyn Error>> {
let logs = r#"1 true hello
2 false world"#;
for line in logs.lines() {
let entry: LogEntry = line.parse()?;
println!("{:#?}", entry);
}
Ok(())
}
👭 将此crate视为envy的堂兄弟,envy是一个将环境变量反序列化为类型安全的struct的crate。
Doug Tangren (softprops) 2019
依赖关系
~2.6-4MB
~78K SLoC