17 个版本 (1 个稳定版本)
2.0.0-alpha.4 | 2024年7月23日 |
---|---|
2.0.0-alpha.1 | 2024年6月7日 |
1.0.0 | 2023年8月22日 |
0.10.0 | 2023年7月5日 |
0.2.2 | 2021年2月22日 |
#170 in 解析器实现
每月下载量 704
用于 4 个 crate (2 个直接使用)
1MB
16K SLoC
imap-codec
%%{init: {'theme': 'neutral' } }%%
flowchart LR
imap-types --> imap-codec
imap-codec -.-> imap-next
imap-next -.-> imap-proxy
imap-next -.-> imap-client
style imap-codec stroke-width:4px
click imap-types href "https://github.com/duesee/imap-codec/tree/main/imap-types"
click imap-codec href "https://github.com/duesee/imap-codec"
click imap-next href "https://github.com/duesee/imap-next"
click imap-proxy href "https://github.com/duesee/imap-proxy"
click imap-client href "https://github.com/soywod/imap-client"
此库为 IMAP4rev1 实现提供解析和序列化功能。它基于 imap-types
,并为 Rust 中 IMAP 客户端和服务器实现提供了一个 稳定且文档完善的 构建块。实现了 IMAP4rev1 的完整 正式语法 和几个 IMAP 扩展。
如果您正在寻找薄协议处理,即 LITERAL 处理、AUTHENTICATE 和 IDLE,请访问 imap-next
。
功能
- 解析以流模式工作。当数据不足,无法做出最终决定时,返回
Incomplete
。不会截断任何消息。 - 默认情况下,解析是无拷贝的。在解析过程中避免分配,但可以将所有消息显式转换为更灵活的所有权变体。
- 模糊测试和基于属性的测试对库进行了测试。库经过模糊测试,确保不会产生它自己无法解析的消息。
使用
use imap_codec::{decode::Decoder, encode::Encoder, CommandCodec};
fn main() {
let input = b"ABCD UID FETCH 1,2:* (BODY.PEEK[1.2.3.4.MIME]<42.1337>)\r\n";
let codec = CommandCodec::new();
let (remainder, command) = codec.decode(input).unwrap();
println!("# Parsed\n\n{:#?}\n\n", command);
let buffer = codec.encode(&command).dump();
// Note: IMAP4rev1 may produce messages that are not valid UTF-8.
println!("# Serialized\n\n{:?}", std::str::from_utf8(&buffer));
}
许可协议
此 crate 在 Apache 2.0 和 MIT 条款下双许可。
依赖项
~2.4–3.5MB
~68K SLoC