eml-codec/src/trace.rs

74 lines
1.7 KiB
Rust
Raw Normal View History

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
}