From eebea56f1694dffcaf8c3d1565eeff2a6a5dece3 Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Thu, 28 Mar 2024 15:22:55 +0100 Subject: [PATCH] Upgrade email-encoding to v0.3 (#952) --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- src/message/header/content_disposition.rs | 6 +++--- src/message/header/mailbox.rs | 6 +++--- src/message/header/mod.rs | 18 ++++++------------ src/message/mailbox/types.rs | 6 +++--- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee3beba..4f081e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -720,11 +720,11 @@ checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "email-encoding" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbfb21b9878cf7a348dcb8559109aabc0ec40d69924bd706fa5149846c4fef75" +checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f" dependencies = [ - "base64 0.21.7", + "base64 0.22.0", "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index 1062100..f3eb061 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ mime = { version = "0.3.4", optional = true } fastrand = { version = "2.0", optional = true } quoted_printable = { version = "0.5", optional = true } base64 = { version = "0.22", optional = true } -email-encoding = { version = "0.2", optional = true } +email-encoding = { version = "0.3", optional = true } # file transport uuid = { version = "1", features = ["v4"], optional = true } diff --git a/src/message/header/content_disposition.rs b/src/message/header/content_disposition.rs index dfe97ad..66331a5 100644 --- a/src/message/header/content_disposition.rs +++ b/src/message/header/content_disposition.rs @@ -1,6 +1,6 @@ use std::fmt::Write; -use email_encoding::headers::EmailWriter; +use email_encoding::headers::writer::EmailWriter; use super::{Header, HeaderName, HeaderValue}; use crate::BoxError; @@ -38,10 +38,10 @@ impl ContentDisposition { let mut encoded_value = String::new(); let line_len = "Content-Disposition: ".len(); { - let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false, false); + let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false); w.write_str(kind).expect("writing `kind` returned an error"); w.write_char(';').expect("writing `;` returned an error"); - w.optional_breakpoint(); + w.space(); email_encoding::headers::rfc2231::encode("filename", file_name, &mut w) .expect("some Write implementation returned an error"); diff --git a/src/message/header/mailbox.rs b/src/message/header/mailbox.rs index 6a24c6b..e2c47c1 100644 --- a/src/message/header/mailbox.rs +++ b/src/message/header/mailbox.rs @@ -1,4 +1,4 @@ -use email_encoding::headers::EmailWriter; +use email_encoding::headers::writer::EmailWriter; use super::{Header, HeaderName, HeaderValue}; use crate::{ @@ -31,7 +31,7 @@ macro_rules! mailbox_header { let mut encoded_value = String::new(); let line_len = $header_name.len() + ": ".len(); { - let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false, false); + let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false); self.0.encode(&mut w).expect("writing `Mailbox` returned an error"); } @@ -81,7 +81,7 @@ macro_rules! mailboxes_header { let mut encoded_value = String::new(); let line_len = $header_name.len() + ": ".len(); { - let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false, false); + let mut w = EmailWriter::new(&mut encoded_value, line_len, 0, false); self.0.encode(&mut w).expect("writing `Mailboxes` returned an error"); } diff --git a/src/message/header/mod.rs b/src/message/header/mod.rs index 649efef..76f367e 100644 --- a/src/message/header/mod.rs +++ b/src/message/header/mod.rs @@ -7,7 +7,7 @@ use std::{ ops::Deref, }; -use email_encoding::headers::EmailWriter; +use email_encoding::headers::writer::EmailWriter; pub use self::{ content::*, @@ -348,7 +348,7 @@ impl<'a> HeaderValueEncoder<'a> { fn new(name: &str, writer: &'a mut dyn Write) -> Self { let line_len = name.len() + ": ".len(); - let writer = EmailWriter::new(writer, line_len, 0, false, false); + let writer = EmailWriter::new(writer, line_len, 0, false); Self { writer, @@ -612,17 +612,14 @@ mod tests { "🌍 , 🦆 Everywhere , Иванов Иван Иванович , Jānis Bērziņš , Seán Ó Rudaí ".to_owned(), )); - // TODO: fix the fact that the encoder doesn't know that - // the space between the name and the address should be - // removed when wrapping. assert_eq!( headers.to_string(), concat!( "To: =?utf-8?b?8J+MjQ==?= , =?utf-8?b?8J+mhg==?=\r\n", " Everywhere , =?utf-8?b?0JjQstCw0L3QvtCyINCY0LLQsNC9?=\r\n", " =?utf-8?b?INCY0LLQsNC90L7QstC40Yc=?= ,\r\n", - " =?utf-8?b?SsSBbmlzIELEk3J6acWGxaE=?= ,\r\n", - " =?utf-8?b?U2XDoW4gw5MgUnVkYcOt?= \r\n", + " =?utf-8?b?SsSBbmlzIELEk3J6acWGxaE=?= , =?utf-8?b?U2U=?=\r\n", + " =?utf-8?b?w6FuIMOTIFJ1ZGHDrQ==?= \r\n", ) ); } @@ -687,9 +684,6 @@ mod tests { "quoted-printable".to_owned(), )); - // TODO: fix the fact that the encoder doesn't know that - // the space between the name and the address should be - // removed when wrapping. assert_eq!( headers.to_string(), concat!( @@ -699,8 +693,8 @@ mod tests { "To: =?utf-8?b?8J+MjQ==?= , =?utf-8?b?8J+mhg==?=\r\n", " Everywhere , =?utf-8?b?0JjQstCw0L3QvtCyINCY0LLQsNC9?=\r\n", " =?utf-8?b?INCY0LLQsNC90L7QstC40Yc=?= ,\r\n", - " =?utf-8?b?SsSBbmlzIELEk3J6acWGxaE=?= ,\r\n", - " =?utf-8?b?U2XDoW4gw5MgUnVkYcOt?= \r\n", + " =?utf-8?b?SsSBbmlzIELEk3J6acWGxaE=?= , =?utf-8?b?U2U=?=\r\n", + " =?utf-8?b?w6FuIMOTIFJ1ZGHDrQ==?= \r\n", "From: Someone \r\n", "Content-Transfer-Encoding: quoted-printable\r\n", ) diff --git a/src/message/mailbox/types.rs b/src/message/mailbox/types.rs index b2038ba..eb9a3d2 100644 --- a/src/message/mailbox/types.rs +++ b/src/message/mailbox/types.rs @@ -6,7 +6,7 @@ use std::{ }; use chumsky::prelude::*; -use email_encoding::headers::EmailWriter; +use email_encoding::headers::writer::EmailWriter; use super::parsers; use crate::address::{Address, AddressError}; @@ -72,7 +72,7 @@ impl Mailbox { pub(crate) fn encode(&self, w: &mut EmailWriter<'_>) -> FmtResult { if let Some(name) = &self.name { email_encoding::headers::quoted_string::encode(name, w)?; - w.optional_breakpoint(); + w.space(); w.write_char('<')?; } @@ -261,7 +261,7 @@ impl Mailboxes { for mailbox in self.iter() { if !mem::take(&mut first) { w.write_char(',')?; - w.optional_breakpoint(); + w.space(); } mailbox.encode(w)?;