Merge pull request 'always attach headers to naivemime' (#25) from headers_kv2 into main

Reviewed-on: #25
This commit is contained in:
Quentin 2023-09-18 14:38:47 +00:00
commit 8b17af73fa
2 changed files with 24 additions and 27 deletions

View file

@ -51,15 +51,6 @@ pub struct Imf<'a> {
// MIME // MIME
pub mime_version: Option<Version>, pub mime_version: Option<Version>,
// Raw fields
pub kv: Vec<header::Field<'a>>,
}
impl<'a> Imf<'a> {
pub fn with_kv(mut self, v: Vec<header::Field<'a>>) -> Self {
self.kv = v;
self
}
} }
//@FIXME min and max limits are not enforced, //@FIXME min and max limits are not enforced,

View file

@ -162,6 +162,7 @@ pub fn message<'a>(
m: mime::MIME<'a, mime::r#type::DeductibleMessage>, m: mime::MIME<'a, mime::r#type::DeductibleMessage>,
) -> impl Fn(&'a [u8]) -> IResult<&'a [u8], Message<'a>> { ) -> impl Fn(&'a [u8]) -> IResult<&'a [u8], Message<'a>> {
move |input: &[u8]| { move |input: &[u8]| {
let mut parent_mime = m.clone();
let orig = input; let orig = input;
// parse header fields // parse header fields
@ -175,10 +176,10 @@ pub fn message<'a>(
// aggregate header fields // aggregate header fields
let (naive_mime, imf) = part::field::split_and_build(&headers); let (naive_mime, imf) = part::field::split_and_build(&headers);
// Bind headers to the IMF object // Bind headers to parent mime object
let imf = imf.with_kv(headers); parent_mime.fields = parent_mime.fields.with_kv(headers);
// interpret headers to choose a mime type // interpret headers to choose the child mime type
let in_mime = naive_mime let in_mime = naive_mime
.with_raw(raw_headers) .with_raw(raw_headers)
.to_interpreted::<mime::WithGenericDefault>() .to_interpreted::<mime::WithGenericDefault>()
@ -195,7 +196,7 @@ pub fn message<'a>(
Ok(( Ok((
input, input,
Message { Message {
mime: m.clone(), mime: parent_mime,
imf, imf,
raw_part, raw_part,
raw_headers, raw_headers,
@ -439,7 +440,25 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO<br />
Ok(( Ok((
&[][..], &[][..],
Message { Message {
mime: base_mime, mime: mime::MIME {
interpreted_type: base_mime.interpreted_type,
fields: mime::NaiveMIME {
kv: vec![
header::Field::Good(header::Kv2(&b"Date"[..], &b"Sat, 8 Jul 2023 07:14:29 +0200"[..])),
header::Field::Good(header::Kv2(&b"From"[..], &b"Grrrnd Zero <grrrndzero@example.org>"[..])),
header::Field::Good(header::Kv2(&b"To"[..], &b"John Doe <jdoe@machine.example>"[..])),
header::Field::Good(header::Kv2(&b"CC"[..], &b"=?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>"[..])),
header::Field::Good(header::Kv2(&b"Subject"[..], &b"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="[..])),
header::Field::Good(header::Kv2(&b"X-Unknown"[..], &b"something something"[..])),
header::Field::Bad(&b"Bad entry\n on multiple lines\n"[..]),
header::Field::Good(header::Kv2(&b"Message-ID"[..], &b"<NTAxNzA2AC47634Y366BAMTY4ODc5MzQyODY0ODY5@www.grrrndzero.org>"[..])),
header::Field::Good(header::Kv2(&b"MIME-Version"[..], &b"1.0"[..])),
header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"multipart/alternative;\n boundary=\"b1_e376dc71bafc953c0b0fdeb9983a9956\""[..])),
header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"7bit"[..])),
],
..base_mime.fields
},
},
raw_part: fullmail, raw_part: fullmail,
raw_headers: hdrs, raw_headers: hdrs,
raw_body: body, raw_body: body,
@ -506,19 +525,6 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO<br />
right: &b"www.grrrndzero.org"[..], right: &b"www.grrrndzero.org"[..],
}), }),
mime_version: Some(imf::mime::Version { major: 1, minor: 0}), mime_version: Some(imf::mime::Version { major: 1, minor: 0}),
kv: vec![
header::Field::Good(header::Kv2(&b"Date"[..], &b"Sat, 8 Jul 2023 07:14:29 +0200"[..])),
header::Field::Good(header::Kv2(&b"From"[..], &b"Grrrnd Zero <grrrndzero@example.org>"[..])),
header::Field::Good(header::Kv2(&b"To"[..], &b"John Doe <jdoe@machine.example>"[..])),
header::Field::Good(header::Kv2(&b"CC"[..], &b"=?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>"[..])),
header::Field::Good(header::Kv2(&b"Subject"[..], &b"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="[..])),
header::Field::Good(header::Kv2(&b"X-Unknown"[..], &b"something something"[..])),
header::Field::Bad(&b"Bad entry\n on multiple lines\n"[..]),
header::Field::Good(header::Kv2(&b"Message-ID"[..], &b"<NTAxNzA2AC47634Y366BAMTY4ODc5MzQyODY0ODY5@www.grrrndzero.org>"[..])),
header::Field::Good(header::Kv2(&b"MIME-Version"[..], &b"1.0"[..])),
header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"multipart/alternative;\n boundary=\"b1_e376dc71bafc953c0b0fdeb9983a9956\""[..])),
header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"7bit"[..])),
],
..imf::Imf::default() ..imf::Imf::default()
}, },
child: Box::new(AnyPart::Mult(Multipart { child: Box::new(AnyPart::Mult(Multipart {