From c3d273ed00739075101112c7738ac511d73b3ce3 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Mon, 24 Jul 2023 15:50:20 +0200 Subject: [PATCH] improve sota --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ab13f3..3de96e5 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ are 3 handwritten parsers. Such handwritten parsers do not encourage separation with a high cylomatic complexity. Due to this complex logic, I have failed to debug/patch such code in the past. `rust-email` code is easier to read but its mime part implementation is marked as unstable. `mail_parser` is used in the IMAP/JMAP/SMTP server project [stalwartlabs/mail-server](https://github.com/stalwartlabs/mail-server) and `rust-email` is used in the email-based chat application [Deltachat](https://github.com/deltachat) (however `rust-email` MIME parsed is not used, a custom MIME parser is reimplemented in Delta Chat instead). It must be noted that `mail_parser` supports a large amount of extensions (UTF-8 headers, UTF-7 encoding, continuation, many custom fields, etc.) and would better cope with malformed emails than other libraries. **A goal of `eml_codec` is to be open to contribution and maintainable over time, which is made possible trough the parser combinator pattern that encourages writing small, reusable, independently testable functions.** -[rustyknife](https://github.com/jothan/rustyknife) is more targeted to SMTP servers (MTA) than IMAP (MDA) and email clients (MUA). +[rustyknife](https://github.com/jothan/rustyknife) uses the same design pattern (parser combinator) and the same library ([nom](https://github.com/rust-bakery/nom)) as `eml_codec`. However, `rustyknife` is more targeted to SMTP servers (MTA) than IMAP (MDA) and email clients (MUA). It thus only supports parsing headers and not emails' body. Also, an acquaintance warned me that this library is a bit slow, it might be due to the fact that the library does some processing while parsing the email (like rebuilding and allocating strings). If it happens that this part is not used later, the allocation/processing has been wasted.