From 12580d82f4b8631ad8349356337a6acbcc480c22 Mon Sep 17 00:00:00 2001 From: Birk Tjelmeland Date: Thu, 25 Jan 2024 21:20:22 +0100 Subject: [PATCH] style(email): Change `Part::body_raw` to `Part::format_body` --- src/message/mimebody.rs | 51 +++++++++++++++-------------------------- src/message/mod.rs | 2 +- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/message/mimebody.rs b/src/message/mimebody.rs index c511269..35bf54f 100644 --- a/src/message/mimebody.rs +++ b/src/message/mimebody.rs @@ -18,10 +18,11 @@ pub(super) enum Part { } impl Part { - pub(super) fn body_raw(&self) -> Vec { + #[cfg(feature = "dkim")] + pub(super) fn format_body(&self, out: &mut Vec) { match self { - Part::Single(part) => part.body_raw(), - Part::Multi(part) => part.body_raw(), + Part::Single(part) => part.format_body(out), + Part::Multi(part) => part.format_body(out), } } } @@ -142,11 +143,10 @@ impl SinglePart { out } - pub(super) fn body_raw(&self) -> Vec { - let mut out = Vec::new(); + /// Format only the signlepart body + fn format_body(&self, out: &mut Vec) { out.extend_from_slice(&self.body); out.extend_from_slice(b"\r\n"); - out } } @@ -155,8 +155,7 @@ impl EmailFormat for SinglePart { write!(out, "{}", self.headers) .expect("A Write implementation panicked while formatting headers"); out.extend_from_slice(b"\r\n"); - out.extend_from_slice(&self.body); - out.extend_from_slice(b"\r\n"); + self.format_body(out); } } @@ -390,31 +389,8 @@ impl MultiPart { out } - pub(super) fn body_raw(&self) -> Vec { - let mut out = Vec::new(); - - let boundary = self.boundary(); - - for part in &self.parts { - out.extend_from_slice(b"--"); - out.extend_from_slice(boundary.as_bytes()); - out.extend_from_slice(b"\r\n"); - part.format(&mut out); - } - - out.extend_from_slice(b"--"); - out.extend_from_slice(boundary.as_bytes()); - out.extend_from_slice(b"--\r\n"); - out - } -} - -impl EmailFormat for MultiPart { - fn format(&self, out: &mut Vec) { - write!(out, "{}", self.headers) - .expect("A Write implementation panicked while formatting headers"); - out.extend_from_slice(b"\r\n"); - + /// Format only the multipart body + fn format_body(&self, out: &mut Vec) { let boundary = self.boundary(); for part in &self.parts { @@ -430,6 +406,15 @@ impl EmailFormat for MultiPart { } } +impl EmailFormat for MultiPart { + fn format(&self, out: &mut Vec) { + write!(out, "{}", self.headers) + .expect("A Write implementation panicked while formatting headers"); + out.extend_from_slice(b"\r\n"); + self.format_body(out); + } +} + #[cfg(test)] mod test { use pretty_assertions::assert_eq; diff --git a/src/message/mod.rs b/src/message/mod.rs index 414f4ca..01f31da 100644 --- a/src/message/mod.rs +++ b/src/message/mod.rs @@ -525,7 +525,7 @@ impl Message { pub(crate) fn body_raw(&self) -> Vec { let mut out = Vec::new(); match &self.body { - MessageBody::Mime(p) => out = p.body_raw(), + MessageBody::Mime(p) => p.format_body(&mut out), MessageBody::Raw(r) => out.extend_from_slice(r), }; out.extend_from_slice(b"\r\n");