mime header fields
This commit is contained in:
parent
766eef71c7
commit
9b5ceafa5d
3 changed files with 57 additions and 6 deletions
15
README.md
15
README.md
|
@ -101,11 +101,16 @@ Todo:
|
||||||
| 🔴 |2047 | ↳ MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text |
|
| 🔴 |2047 | ↳ MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text |
|
||||||
| 🔴 |2048 | ↳ Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures |
|
| 🔴 |2048 | ↳ Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures |
|
||||||
| 🔴 |2049 | ↳ Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples |
|
| 🔴 |2049 | ↳ Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples |
|
||||||
| 🔴 |2183 | Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field |
|
| | | **Headers extensions** |
|
||||||
| 🔴 |3462 | The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages |
|
| 🔴 |2183 | ↳ Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field |
|
||||||
| 🔴 |3798 | Message Disposition Notification |
|
| 🟩 |6532 | ↳ Internationalized Email Headers |
|
||||||
| 🟩 |6532 | Internationalized Email Headers |
|
| 🔴 |9228 | ↳ Delivered-To Email Header Field |
|
||||||
| 🔴 |9228 | Delivered-To Email Header Field |
|
| | | **MIME extensions** |
|
||||||
|
| 🔴 |1847 | ↳ Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted |
|
||||||
|
| 🔴 |2387 | ↳ The MIME Multipart/Related Content-type |
|
||||||
|
| 🔴 |3462 | ↳ The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages |
|
||||||
|
| 🔴 |3798 | ↳ Message Disposition Notification |
|
||||||
|
| 🔴 |6838 | ↳ Media Type Specifications and Registration Procedures |
|
||||||
|
|
||||||
IANA references :
|
IANA references :
|
||||||
- (tbd) MIME subtypes
|
- (tbd) MIME subtypes
|
||||||
|
|
|
@ -17,4 +17,5 @@ pub enum IMFError<'a> {
|
||||||
ReceivedLog(nom::Err<nom::error::Error<&'a str>>),
|
ReceivedLog(nom::Err<nom::error::Error<&'a str>>),
|
||||||
Version(nom::Err<nom::error::Error<&'a str>>),
|
Version(nom::Err<nom::error::Error<&'a str>>),
|
||||||
ContentType(nom::Err<nom::error::Error<&'a str>>),
|
ContentType(nom::Err<nom::error::Error<&'a str>>),
|
||||||
|
Mechanism(nom::Err<nom::error::Error<&'a str>>),
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,9 @@ impl<'a> TryFrom<&'a lazy::Mechanism<'a>> for Mechanism<'a> {
|
||||||
type Error = IMFError<'a>;
|
type Error = IMFError<'a>;
|
||||||
|
|
||||||
fn try_from(mc: &'a lazy::Mechanism<'a>) -> Result<Self, Self::Error> {
|
fn try_from(mc: &'a lazy::Mechanism<'a>) -> Result<Self, Self::Error> {
|
||||||
Ok(Mechanism::Other(""))
|
mechanism(mc.0)
|
||||||
|
.map(|(_, v)| v)
|
||||||
|
.map_err(|e| IMFError::Mechanism(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,6 +387,22 @@ pub fn content_type(input: &str) -> IResult<&str, Type> {
|
||||||
Ok((rest, parsed))
|
Ok((rest, parsed))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn mechanism(input: &str) -> IResult<&str, Mechanism> {
|
||||||
|
use Mechanism::*;
|
||||||
|
|
||||||
|
let (input, mecha) = token(input)?;
|
||||||
|
let parsed = match mecha.to_lowercase().as_ref() {
|
||||||
|
"7bit" => _7Bit,
|
||||||
|
"8bit" => _8Bit,
|
||||||
|
"binary" => Binary,
|
||||||
|
"quoted-printable" => QuotedPrintable,
|
||||||
|
"base64" => Base64,
|
||||||
|
_ => Other(mecha),
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok((input, parsed))
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -491,6 +509,33 @@ mod tests {
|
||||||
parameter("charset=us-ascii (Plain text)"),
|
parameter("charset=us-ascii (Plain text)"),
|
||||||
Ok(("", Parameter::Charset(EmailCharset::US_ASCII)))
|
Ok(("", Parameter::Charset(EmailCharset::US_ASCII)))
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mechanism() {
|
||||||
|
assert_eq!(
|
||||||
|
Mechanism::try_from(&lazy::Mechanism("7bit")),
|
||||||
|
Ok(Mechanism::_7Bit),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
Mechanism::try_from(&lazy::Mechanism("(youhou) 8bit")),
|
||||||
|
Ok(Mechanism::_8Bit),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
Mechanism::try_from(&lazy::Mechanism("(blip) bInArY (blip blip)")),
|
||||||
|
Ok(Mechanism::Binary),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
Mechanism::try_from(&lazy::Mechanism(" base64 ")),
|
||||||
|
Ok(Mechanism::Base64),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
Mechanism::try_from(&lazy::Mechanism(" Quoted-Printable ")),
|
||||||
|
Ok(Mechanism::QuotedPrintable),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue