3个版本
0.1.2 | 2021年12月28日 |
---|---|
0.1.1 | 2019年4月21日 |
0.1.0 | 2019年4月14日 |
#81 in #named
695 个月下载量
在recap中使用
7KB
127 行
recap
将命名的捕获组反序列化到安全的数据结构中
Recap为envy提供环境变量功能,同样为命名的捕获组提供。命名的正则表达式捕获组类似于其他任何正则表达式捕获组,但它们具有额外的属性,即与名称相关联。例如 (?P-of-capture>some-pattern)
🤔 这是给谁的
您可能发现在以下场景下这个crate很有用:当您的应用程序需要从第三方提供的具有松散结构的格式字符串输入中提取信息时。
一个常见的用例是您处理日志文件数据,这些数据不是以特定的结构化格式(如JSON)存储的,而是以可以用模式表示的格式存储。
您还可能发现解析其他松散格式数据模式时此功能很有用。
此crate在输入格式更结构化,例如JSON时可能不太合适。对于这种情况,我建议使用类似 serde-json
的crate。
📦 安装
将以下内容添加到您的 Cargo.toml
文件中。
[dependencies]
recap = "0.1"
🤸 使用
典型的使用示例如下。假设您的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是一个将环境变量反序列化为类型安全结构的crate。
Doug Tangren (softprops) 2019
依赖项
~3–4.5MB
~88K SLoC