#imap #codec #parser #client-server

imap-codec

稳定且完整的 IMAP 编解码器

17 个版本 (1 个稳定版本)

2.0.0-alpha.42024年7月23日
2.0.0-alpha.12024年6月7日
1.0.0 2023年8月22日
0.10.0 2023年7月5日
0.2.2 2021年2月22日

#170 in 解析器实现

Download history 55/week @ 2024-04-26 92/week @ 2024-05-03 51/week @ 2024-05-10 70/week @ 2024-05-17 60/week @ 2024-05-24 45/week @ 2024-05-31 172/week @ 2024-06-07 66/week @ 2024-06-14 64/week @ 2024-06-21 39/week @ 2024-06-28 57/week @ 2024-07-05 308/week @ 2024-07-12 239/week @ 2024-07-19 189/week @ 2024-07-26 159/week @ 2024-08-02 43/week @ 2024-08-09

每月下载量 704
用于 4 个 crate (2 个直接使用)

MIT/Apache 许可协议

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