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 在 解析器实现
每月1,049 次下载
用于 3 个crate(2 个直接使用)
76KB
1.5K SLoC
用于处理Debian中使用的RFC822样式的Rust库
关于
此crate实现了受RFC822启发的文件格式,该格式用于Debian软件包。它是软件包中debian/control
文件和apt
的Packages
文件的格式。它被称为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