2023-06-13 15:47:57 +00:00
|
|
|
use nom::{
|
|
|
|
IResult,
|
|
|
|
|
2023-06-13 17:35:41 +00:00
|
|
|
};
|
2023-06-13 15:47:57 +00:00
|
|
|
use crate::model;
|
|
|
|
|
|
|
|
enum RestField<'a> {
|
|
|
|
// 3.6.6. Resent Fields
|
2023-06-13 17:35:41 +00:00
|
|
|
ResentDate(model::HeaderDate),
|
|
|
|
ResentFrom(Vec<model::MailboxRef>),
|
|
|
|
ResentSender(model::MailboxRef),
|
|
|
|
ResentTo(Vec<model::AddressRef>),
|
|
|
|
ResentCc(Vec<model::AddressRef>),
|
|
|
|
ResentBcc(Vec<model::AddressRef>),
|
2023-06-13 15:47:57 +00:00
|
|
|
ResentMessageID(model::MessageId<'a>),
|
|
|
|
|
|
|
|
// 3.6.8. Optional fields
|
|
|
|
Optional(&'a str, String),
|
|
|
|
}
|
|
|
|
|
2023-06-13 17:35:41 +00:00
|
|
|
enum PreludeField {
|
2023-06-13 15:47:57 +00:00
|
|
|
// 3.6.7. Trace Fields
|
|
|
|
ReturnPath(String),
|
|
|
|
Received(Vec<String>),
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Section
|
|
|
|
///
|
|
|
|
/// Rewritten section for more compatibility
|
|
|
|
///
|
|
|
|
/// ```abnf
|
|
|
|
///*(trace
|
|
|
|
/// *(optional-field /
|
|
|
|
/// resent-date /
|
|
|
|
/// resent-from /
|
|
|
|
/// resent-sender /
|
|
|
|
/// resent-to /
|
|
|
|
/// resent-cc /
|
|
|
|
/// resent-bcc /
|
|
|
|
/// resent-msg-id))
|
|
|
|
/// ```
|
|
|
|
pub fn section(input: &str) -> IResult<&str, model::Trace> {
|
|
|
|
let (input, mut prelude_trace) = prelude(input)?;
|
2023-06-13 17:35:41 +00:00
|
|
|
/*let (input, full_trace) = fold_many0(
|
2023-06-13 15:47:57 +00:00
|
|
|
rest_field,
|
|
|
|
prelude_trace,
|
|
|
|
|mut trace, field| {
|
|
|
|
match field {
|
|
|
|
|
|
|
|
}
|
2023-06-13 17:35:41 +00:00
|
|
|
}*/
|
2023-06-13 15:47:57 +00:00
|
|
|
|
2023-06-13 17:35:41 +00:00
|
|
|
unimplemented!();
|
2023-06-13 15:47:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Trace prelude
|
|
|
|
///
|
|
|
|
/// ```abnf
|
|
|
|
/// trace = [return]
|
|
|
|
/// 1*received
|
|
|
|
/// return = "Return-Path:" path CRLF
|
|
|
|
/// path = angle-addr / ([CFWS] "<" [CFWS] ">" [CFWS])
|
|
|
|
/// received = "Received:" *received-token ";" date-time CRLF
|
|
|
|
/// received-token = word / angle-addr / addr-spec / domain
|
|
|
|
/// ```
|
|
|
|
fn prelude(input: &str) -> IResult<&str, model::Trace> {
|
2023-06-13 17:35:41 +00:00
|
|
|
unimplemented!();
|
2023-06-13 15:47:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn rest_field(input: &str) -> IResult<&str, RestField> {
|
2023-06-13 17:35:41 +00:00
|
|
|
unimplemented!();
|
2023-06-13 15:47:57 +00:00
|
|
|
// Ensure this is not a new prelude
|
|
|
|
}
|