#debian #rfc822 #file-format #debian-package #serde

rfc822-like

为serde实现的控制文件中使用的RFC822样式编码

5次发布

0.2.2 2024年6月29日
0.2.1 2021年12月20日
0.2.0 2021年12月13日
0.1.1 2021年12月13日
0.1.0 2021年8月5日

#255解析器实现

Download history 97/week @ 2024-05-03 74/week @ 2024-05-10 133/week @ 2024-05-17 285/week @ 2024-05-24 291/week @ 2024-05-31 146/week @ 2024-06-07 280/week @ 2024-06-14 122/week @ 2024-06-21 554/week @ 2024-06-28 282/week @ 2024-07-05 68/week @ 2024-07-12 248/week @ 2024-07-19 185/week @ 2024-07-26 293/week @ 2024-08-02 240/week @ 2024-08-09 317/week @ 2024-08-16

每月1,049 次下载
用于 3 个crate(2 个直接使用)

MITNFA 许可证

76KB
1.5K SLoC

用于处理Debian中使用的RFC822样式的Rust库

关于

此crate实现了受RFC822启发的文件格式,该格式用于Debian软件包。它是软件包中debian/control文件和aptPackages文件的格式。它被称为rfc822-like而不是简单的rfc822,因为Debian并不声称完全实现了RFC822,而这个crate专注于与Debian工具一起工作,而不是解析确切的RFC822文件格式。坦白说,我甚至懒得去读RFC822本身。

如果您需要严格解析RFC822,我建议您分叉此crate并修复任何差异。我对维护严格的RFC822 crate不感兴趣,所以不要为此发送PR,但我愿意将公共部分放入它们的自己的crate中。如果您对此方法感兴趣,请随时提交PR(或者如果有问题请先询问)。

请注意,此crate目前未针对性能进行优化。有多个地方可以避免分配,并且可能缺少其他优化。它对我的个人用例来说绝对没问题,也许对您的也是如此。如果您需要它更快或者只是想提高其性能,我将很高兴接受PR。

API目前尚未确定,可能随着时间的推移而变化。已采取基本步骤以最小化变化的影响(例如,封装Error类型)。

示例

有关更多示例和详细说明,请查看crate文档。

use rfc822_like::de::Deserializer;
use serde::Deserialize;

let input = "Package: foo
Description: The Foo

Package: bar
Description: The Bar
";

let mut reader = input.as_bytes();

#[derive(Debug, Eq, PartialEq, serde_derive::Deserialize)]
#[serde(rename_all = "PascalCase")]
struct Record {
    package: String,
    description: String,
}

let expected = vec![
    Record {
        package: "foo".to_owned(),
        description:"The Foo".to_owned(),
    },
    Record {
        package: "bar".to_owned(),
        description: "The Bar".to_owned(),
    },
];

let deserialized = <Vec<Record>>::deserialize(Deserializer::new(&mut reader)).unwrap();
assert_eq!(deserialized, expected);

MSRV

最新Debian稳定版中可用的任何Rust版本,目前为1.41.1。

许可证

MITNFA

依赖项

~0.9–1.5MB
~30K SLoC