summaryrefslogtreecommitdiffstats
path: root/core/src/encode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/encode.rs')
-rw-r--r--core/src/encode.rs128
1 files changed, 58 insertions, 70 deletions
diff --git a/core/src/encode.rs b/core/src/encode.rs
index 1ea34c0..1a1c5c5 100644
--- a/core/src/encode.rs
+++ b/core/src/encode.rs
@@ -1,33 +1,20 @@
-use soft_ascii_string::{
- SoftAsciiStr,
- SoftAsciiChar,
- SoftAsciiString
-};
use media_type::BOUNDARY;
+use soft_ascii_string::{SoftAsciiChar, SoftAsciiStr, SoftAsciiString};
-use internals::{
- encoder::{
- EncodingBuffer, EncodingWriter,
- },
- error::{EncodingError, EncodingErrorKind, Place, UTF_8, US_ASCII}
-};
use headers::{
- HeaderName,
- HeaderObj, HeaderObjTrait,
- HeaderKind,
- headers::{ContentTransferEncoding, ContentType}
+ headers::{ContentTransferEncoding, ContentType},
+ HeaderKind, HeaderName, HeaderObj, HeaderObjTrait,
+};
+use internals::{
+ encoder::{EncodingBuffer, EncodingWriter},
+ error::{EncodingError, EncodingErrorKind, Place, US_ASCII, UTF_8},
};
-use ::{
+use {
error::MailError,
- mail::{
- Mail,
- EncodableMail,
- assume_encoded
- }
+ mail::{assume_encoded, EncodableMail, Mail},
};
-
///
/// # Panics
/// if the body is not yet resolved use `Body::poll_body` or `IntoFuture`
@@ -37,25 +24,20 @@ use ::{
pub(crate) fn encode_mail(
mail: &EncodableMail,
top: bool,
- encoder: &mut EncodingBuffer
+ encoder: &mut EncodingBuffer,
) -> Result<(), MailError> {
- _encode_mail(&*mail, top, encoder)
- .map_err(|err| {
- let mail_type = encoder.mail_type();
- use self::MailError::*;
-
- match err {
- Encoding(enc_err) => Encoding(enc_err.with_mail_type_or_else(||Some(mail_type))),
- other => other
- }
- })
+ _encode_mail(&*mail, top, encoder).map_err(|err| {
+ let mail_type = encoder.mail_type();
+ use self::MailError::*;
+
+ match err {
+ Encoding(enc_err) => Encoding(enc_err.with_mail_type_or_else(|| Some(mail_type))),
+ other => other,
+ }
+ })
}
-fn _encode_mail(
- mail: &Mail,
- top: bool,
- encoder: &mut EncodingBuffer
-) -> Result<(), MailError> {
+fn _encode_mail(mail: &Mail, top: bool, encoder: &mut EncodingBuffer) -> Result<(), MailError> {
encode_headers(&mail, top, encoder)?;
//the empty line between the headers and the body
@@ -71,35 +53,30 @@ fn _encode_mail(
/// if the body is not yet resolved use `Body::poll_body` or `IntoFuture`
/// on `Mail` to prevent this from happening
///
-fn encode_headers(
- mail: &Mail,
- top: bool,
- encoder: &mut EncodingBuffer
-) -> Result<(), MailError> {
+fn encode_headers(mail: &Mail, top: bool, encoder: &mut EncodingBuffer) -> Result<(), MailError> {
use super::MailBody::*;
let mut handle = encoder.writer();
if top {
- handle.write_str(SoftAsciiStr::from_unchecked(
- "MIME-Version: 1.0"
- ))?;
+ handle.write_str(SoftAsciiStr::from_unchecked("MIME-Version: 1.0"))?;
handle.finish_header();
}
for (name, hbody) in mail.headers().iter() {
let name_as_str = name.as_str();
- let ignored_header = !top &&
- !(name_as_str.starts_with("Content-")
- || name_as_str.starts_with("X-") );
+ let ignored_header =
+ !top && !(name_as_str.starts_with("Content-") || name_as_str.starts_with("X-"));
if ignored_header {
- warn!("non `Content-` header in MIME body: {:?}: {:?}", name, hbody);
+ warn!(
+ "non `Content-` header in MIME body: {:?}: {:?}",
+ name, hbody
+ );
}
encode_header(&mut handle, name, hbody)?;
}
-
match mail.body() {
SingleBody { ref body } => {
let data = assume_encoded(body);
@@ -107,8 +84,11 @@ fn encode_headers(
encode_header(&mut handle, header.name(), &header)?;
let header = ContentType::body(data.media_type().clone());
encode_header(&mut handle, header.name(), &header)?;
- },
- MultipleBodies { hidden_text:_, bodies:_ } => {}
+ }
+ MultipleBodies {
+ hidden_text: _,
+ bodies: _,
+ } => {}
}
Ok(())
}
@@ -116,7 +96,7 @@ fn encode_headers(
fn encode_header(
handle: &mut EncodingWriter,
name: HeaderName,
- header: &HeaderObj
+ header: &HeaderObj,
) -> Result<(), EncodingError> {
//FIXME[rust/catch] use catch block
let res = (|| -> Result<(), EncodingError> {
@@ -129,7 +109,11 @@ fn encode_header(
})();
res.map_err(|err| {
- err.with_place_or_else(|| Some(Place::Header { name: name.as_str() }))
+ err.with_place_or_else(|| {
+ Some(Place::Header {
+ name: name.as_str(),
+ })
+ })
})
}
@@ -138,9 +122,7 @@ fn encode_header(
/// if the body is not yet resolved use `Body::poll_body` or `IntoFuture`
/// on `Mail` to prevent this from happening
///
-fn encode_mail_part(mail: &Mail, encoder: &mut EncodingBuffer )
- -> Result<(), MailError>
-{
+fn encode_mail_part(mail: &Mail, encoder: &mut EncodingBuffer) -> Result<(), MailError> {
use super::MailBody::*;
let minus = SoftAsciiChar::from_unchecked('-');
@@ -150,8 +132,11 @@ fn encode_mail_part(mail: &Mail, encoder: &mut EncodingBuffer )
let data = assume_encoded(body);
let buffer = data.transfer_encoded_buffer();
encoder.write_body_unchecked(buffer);
- },
- MultipleBodies { ref hidden_text, ref bodies } => {
+ }
+ MultipleBodies {
+ ref hidden_text,
+ ref bodies,
+ } => {
if hidden_text.len() > 0 {
//TODO find out if there is any source using the hidden text
// (e.g. for some form of validation, prove of senders validity etc.)
@@ -160,7 +145,8 @@ fn encode_mail_part(mail: &Mail, encoder: &mut EncodingBuffer )
}
let mail_was_validated_err_msg = "[BUG] mail was already validated";
- let boundary = mail.headers()
+ let boundary = mail
+ .headers()
.get_single(ContentType)
.expect(mail_was_validated_err_msg)
.expect(mail_was_validated_err_msg)
@@ -168,16 +154,18 @@ fn encode_mail_part(mail: &Mail, encoder: &mut EncodingBuffer )
.expect(mail_was_validated_err_msg)
.to_content();
- let boundary = SoftAsciiString
- ::from_string(boundary)
- .map_err(|orig_string| EncodingError
- ::from(EncodingErrorKind::InvalidTextEncoding {
- got_encoding: UTF_8,
- expected_encoding: US_ASCII
+ let boundary = SoftAsciiString::from_string(boundary).map_err(|orig_string| {
+ EncodingError::from(EncodingErrorKind::InvalidTextEncoding {
+ got_encoding: UTF_8,
+ expected_encoding: US_ASCII,
+ })
+ .with_place_or_else(|| {
+ Some(Place::Header {
+ name: "Content-Type",
})
- .with_place_or_else(|| Some(Place::Header { name: "Content-Type" }))
- .with_str_context(orig_string.into_source())
- )?;
+ })
+ .with_str_context(orig_string.into_source())
+ })?;
for mail in bodies.iter() {
encoder.write_header_line(|handle| {