13 releases (1 stable)

1.0.0 Aug 22, 2023
0.10.0 Jul 5, 2023
0.7.0 Aug 5, 2022
0.6.0 Jun 14, 2022
0.2.2 Feb 22, 2021

#26 in Email

Download history 66/week @ 2023-11-05 55/week @ 2023-11-12 105/week @ 2023-11-19 112/week @ 2023-11-26 104/week @ 2023-12-03 120/week @ 2023-12-10 43/week @ 2023-12-17 144/week @ 2023-12-24 67/week @ 2023-12-31 66/week @ 2024-01-07 78/week @ 2024-01-14 54/week @ 2024-01-21 55/week @ 2024-01-28 74/week @ 2024-02-04 129/week @ 2024-02-11 307/week @ 2024-02-18

575 downloads per month
Used in melib

MIT/Apache

640KB
13K SLoC

imap-codec

This library provides parsing and serialization for IMAP4rev1 implementations. It is based on imap-types and a rock-solid and well-documented building block for IMAP client and server implementations in Rust. The complete formal syntax of IMAP4rev1 and several IMAP extensions are implemented.

Features

  • Parsing works in streaming mode. Incomplete is returned when there is insufficient data to make a final decision. No message will be truncated.
  • Parsing is zero-copy by default. Allocation is avoided during parsing, but all messages can explicitly be converted into more flexible owned variants.
  • Fuzzing and property-based tests exercise the library. The library is fuzz-tested never to produce a message it can't parse itself.

Usage

use imap_codec::{
    codec::{Decode, Encode},
    command::Command,
};

fn main() {
    let input = b"ABCD UID FETCH 1,2:* (BODY.PEEK[1.2.3.4.MIME]<42.1337>)\r\n";

    let (remainder, parsed) = Command::decode(input).unwrap();
    println!("# Parsed\n\n{:#?}\n\n", parsed);

    let buffer = parsed.encode().dump();

    // Note: IMAP4rev1 may produce messages that are not valid UTF-8.
    println!("# Serialized\n\n{:?}", std::str::from_utf8(&buffer));
}

License

This crate is dual-licensed under Apache 2.0 and MIT terms.

Dependencies

~2.4–3.5MB
~63K SLoC