Expand description
§IMAP protocol library
imap-codec provides complete and detailed parsing and construction of IMAP4rev1 commands and responses. It is based on imap-types and extends it with parsing support using nom.
The main codecs are
GreetingCodec
(to parse the first message from a server),
CommandCodec
(to parse commands from a client), and
ResponseCodec
(to parse responses or results from a server).
Note that IMAP traces are not guaranteed to be UTF-8.
Thus, be careful when using code like from_utf8(...)
.
§Decoding
Decoding is provided through the Decoder
trait.
Every parser takes an input (&[u8]
) and produces a remainder and a parsed value.
Note: Decoding IMAP traces is more elaborate than it seems on a first glance.
Please consult the decode
module documentation to learn how to handle real-world decoding.
§Example
let (remaining, greeting) = GreetingCodec::default()
.decode(b"* OK [ALERT] Hello, World!\r\n<remaining>")
.unwrap();
assert_eq!(
greeting,
Greeting {
kind: GreetingKind::Ok,
code: Some(Code::Alert),
text: Text::try_from("Hello, World!").unwrap(),
}
);
assert_eq!(remaining, &b"<remaining>"[..])
§Encoding
Encoding is provided through the Encoder
trait.
Note: Encoding IMAP traces is more elaborate than it seems on a first glance.
Please consult the encode
module documentation to learn how to handle real-world encoding.
§Example
let greeting = Greeting {
kind: GreetingKind::Ok,
code: Some(Code::Alert),
text: Text::try_from("Hello, World!").unwrap(),
};
let bytes = GreetingCodec::default().encode(&greeting).dump();
assert_eq!(bytes, &b"* OK [ALERT] Hello, World!\r\n"[..]);
§Features
imap-codec forwards many features to imap-types. See imap-types features for a comprehensive list.
In addition, imap-codec defines the following features:
Feature | Description | Enabled by default |
---|---|---|
quirk_crlf_relaxed | Make \r in \r\n optional. | No |
quirk_rectify_numbers | Rectify (invalid) numbers. | No |
quirk_missing_text | Rectify missing text element. | No |
§Quirks
Features starting with quirk_
are used to cope with existing interoperability issues.
Unfortunately, we already observed some standard violations, such as, negative numbers, and missing syntax elements.
Our policy is as follows: If we see an interoperability issue, we file an issue in the corresponding implementation.
If, for any reason, the issue cannot be fixed, and the implementation is “important enough”, e.g., because a user of
imap-codec can’t otherwise access their emails, we may add a quirk_
feature to quickly resolve the problem.
Of course, imap-codec should never violate the IMAP standard itself. So, we need to do this carefully.
Re-exports§
pub use imap_types;
Modules§
Structs§
- Authenticate
Data Codec - Codec for authenticate data lines.
- Command
Codec - Codec for commands.
- Greeting
Codec - Codec for greetings.
- Idle
Done Codec - Codec for idle dones.
- Response
Codec - Codec for responses.