#regex #serde #group #capture #deserialize #named #recap

recap-derive

为使用recap反序列化的类型实现FromStr

3个版本

0.1.2 2021年12月28日
0.1.1 2019年4月21日
0.1.0 2019年4月14日

#81 in #named

Download history 187/week @ 2024-04-08 272/week @ 2024-04-15 283/week @ 2024-04-22 164/week @ 2024-04-29 179/week @ 2024-05-06 325/week @ 2024-05-13 266/week @ 2024-05-20 262/week @ 2024-05-27 198/week @ 2024-06-03 147/week @ 2024-06-10 292/week @ 2024-06-17 130/week @ 2024-06-24 119/week @ 2024-07-01 181/week @ 2024-07-08 202/week @ 2024-07-15 171/week @ 2024-07-22

695 个月下载量
recap中使用

MIT 许可证

7KB
127

recap Main Software License crates.io Released API docs Master API docs

将命名的捕获组反序列化到安全的数据结构中

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