diff --git a/bin/src/main.rs b/bin/src/main.rs index 82c2aec..d934be2 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs @@ -6,7 +6,7 @@ use std::{ path::{Path, PathBuf}, }; -use mail_parser::Message; +use mail_parser::Message as MpMessage; use sanitize_html::{rules::Element, sanitize_str}; use sha2::{Digest, Sha256}; @@ -19,6 +19,28 @@ extern crate sha2; use message_reader::{EmailReader, TestMessagesReader}; +pub struct Message { + uid: String, + data: Vec, +} + +impl Message { + pub fn new(uid: String, data: Vec) -> Message { + Message { + uid, + data, + } + } + + pub(crate) fn get_parsed(&self) -> Option { + MpMessage::parse(&self.data) + } + + pub fn get_uid(&self) -> &String { + &self.uid + } +} + fn main() { let dir = Path::new("data"); if !dir.exists() { @@ -27,10 +49,10 @@ fn main() { let mut reader = TestMessagesReader::new((&Path::new("tests/data")).to_path_buf()); - for (uid, message) in reader.read_rfc822_messages() { - println!("Processing message {}", &uid); + for msg in reader.read_rfc822_messages() { + println!("Processing message {}", msg.get_uid()); - let parsed = Message::parse(&message).expect("A parsed messsage."); + let parsed = msg.get_parsed().expect("A parsed messsage."); let title = parsed.get_subject().expect("Expected a subject"); println!("{}", &title); diff --git a/bin/src/message_reader.rs b/bin/src/message_reader.rs index af66aea..b24d245 100644 --- a/bin/src/message_reader.rs +++ b/bin/src/message_reader.rs @@ -10,8 +10,10 @@ use std::{ use imap::Session; use rustls_connector::RustlsConnector; +use crate::Message; + pub trait EmailReader { - fn read_rfc822_messages(&mut self) -> Box)>>; + fn read_rfc822_messages(&mut self) -> Box>; } pub(crate) struct TestMessagesReader { @@ -25,7 +27,7 @@ impl TestMessagesReader { } impl EmailReader for TestMessagesReader { - fn read_rfc822_messages(&mut self) -> Box)>> { + fn read_rfc822_messages(&mut self) -> Box> { let reader = match read_dir(&self.path) { Ok(r) => r, Err(_) => return Box::new(Vec::new().into_iter()), @@ -47,9 +49,10 @@ impl EmailReader for TestMessagesReader { } }) .filter(|i| i.is_some()) - .map(|i| i.unwrap()); + .map(|i| i.unwrap()) + .map(|i| Message::new(i.0, i.1)); - let iter = items.collect::)>>().into_iter(); + let iter = items.collect::>().into_iter(); Box::new(iter) } @@ -129,17 +132,15 @@ impl ImapReader { } impl EmailReader for ImapReader { - fn read_rfc822_messages(&mut self) -> Box)>> { + fn read_rfc822_messages(&mut self) -> Box> { let msgs = match self.connect() { Ok(m) => m, Err(_) => return Box::new(Vec::new().into_iter()), }; - let items = msgs - .iter() - .map(|i| (i.0.to_owned(), i.1.to_owned())); + let items = msgs.iter().map(|i| Message::new(i.0.to_owned(), i.1.to_owned())); - let iter = items.collect::)>>().into_iter(); + let iter = items.collect::>().into_iter(); Box::new(iter) }