diff --git a/examples/gmail_oauth2.rs b/examples/gmail_oauth2.rs index a323f13..62df292 100644 --- a/examples/gmail_oauth2.rs +++ b/examples/gmail_oauth2.rs @@ -42,7 +42,7 @@ fn main() { match imap_session.fetch("2", "body[text]") { Ok(msgs) => { - for msg in &msgs { + for msg in msgs.iter() { print!("{:?}", msg); } } diff --git a/src/parse.rs b/src/parse.rs index 75729b7..10d56b1 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -411,22 +411,23 @@ mod tests { fn parse_names_test() { let lines = b"* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n"; let (mut send, recv) = mpsc::channel(); - let names = parse_names(lines.to_vec(), &mut send).unwrap(); + let names = Names::parse(lines.to_vec(), &mut send).unwrap(); assert!(recv.try_recv().is_err()); assert_eq!(names.len(), 1); + let first = names.iter().next().unwrap(); assert_eq!( - names[0].attributes(), + first.attributes(), &[NameAttribute::from("\\HasNoChildren")] ); - assert_eq!(names[0].delimiter(), Some(".")); - assert_eq!(names[0].name(), "INBOX"); + assert_eq!(first.delimiter(), Some(".")); + assert_eq!(first.name(), "INBOX"); } #[test] fn parse_fetches_empty() { let lines = b""; let (mut send, recv) = mpsc::channel(); - let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); + let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap(); assert!(recv.try_recv().is_err()); assert!(fetches.is_empty()); } @@ -437,19 +438,22 @@ mod tests { * 24 FETCH (FLAGS (\\Seen) UID 4827943)\r\n\ * 25 FETCH (FLAGS (\\Seen))\r\n"; let (mut send, recv) = mpsc::channel(); - let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); + let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap(); assert!(recv.try_recv().is_err()); assert_eq!(fetches.len(), 2); - assert_eq!(fetches[0].message, 24); - assert_eq!(fetches[0].flags(), &[Flag::Seen]); - assert_eq!(fetches[0].uid, Some(4827943)); - assert_eq!(fetches[0].body(), None); - assert_eq!(fetches[0].header(), None); - assert_eq!(fetches[1].message, 25); - assert_eq!(fetches[1].flags(), &[Flag::Seen]); - assert_eq!(fetches[1].uid, None); - assert_eq!(fetches[1].body(), None); - assert_eq!(fetches[1].header(), None); + let mut iter = fetches.iter(); + let first = iter.next().unwrap(); + assert_eq!(first.message, 24); + assert_eq!(first.flags(), &[Flag::Seen]); + assert_eq!(first.uid, Some(4827943)); + assert_eq!(first.body(), None); + assert_eq!(first.header(), None); + let second = iter.next().unwrap(); + assert_eq!(second.message, 25); + assert_eq!(second.flags(), &[Flag::Seen]); + assert_eq!(second.uid, None); + assert_eq!(second.body(), None); + assert_eq!(second.header(), None); } #[test] @@ -459,11 +463,12 @@ mod tests { * 37 FETCH (UID 74)\r\n\ * 1 RECENT\r\n"; let (mut send, recv) = mpsc::channel(); - let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); + let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap(); assert_eq!(recv.try_recv(), Ok(UnsolicitedResponse::Recent(1))); assert_eq!(fetches.len(), 1); - assert_eq!(fetches[0].message, 37); - assert_eq!(fetches[0].uid, Some(74)); + let first = fetches.iter().next().unwrap(); + assert_eq!(first.message, 37); + assert_eq!(first.uid, Some(74)); } #[test] @@ -475,7 +480,7 @@ mod tests { * OK Searched 91% of the mailbox, ETA 0:01\r\n\ * 37 FETCH (UID 74)\r\n"; let (mut send, recv) = mpsc::channel(); - let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); + let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap(); assert_eq!( recv.try_recv(), Ok(UnsolicitedResponse::Ok { @@ -484,8 +489,9 @@ mod tests { }) ); assert_eq!(fetches.len(), 1); - assert_eq!(fetches[0].message, 37); - assert_eq!(fetches[0].uid, Some(74)); + let first = fetches.iter().next().unwrap(); + assert_eq!(first.message, 37); + assert_eq!(first.uid, Some(74)); } #[test] @@ -494,17 +500,18 @@ mod tests { * LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n\ * 4 EXPUNGE\r\n"; let (mut send, recv) = mpsc::channel(); - let names = parse_names(lines.to_vec(), &mut send).unwrap(); + let names = Names::parse(lines.to_vec(), &mut send).unwrap(); assert_eq!(recv.try_recv().unwrap(), UnsolicitedResponse::Expunge(4)); assert_eq!(names.len(), 1); + let first = names.iter().next().unwrap(); assert_eq!( - names[0].attributes(), + first.attributes(), &[NameAttribute::from("\\HasNoChildren")] ); - assert_eq!(names[0].delimiter(), Some(".")); - assert_eq!(names[0].name(), "INBOX"); + assert_eq!(first.delimiter(), Some(".")); + assert_eq!(first.name(), "INBOX"); } #[test] @@ -635,7 +642,7 @@ mod tests { let lines = b"* VANISHED (EARLIER) 3:8,12,50:60\r\n\ * 49 FETCH (UID 117 FLAGS (\\Seen \\Answered) MODSEQ (90060115194045001))\r\n"; - let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); + let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap(); match recv.try_recv().unwrap() { UnsolicitedResponse::Vanished { earlier, uids } => { assert!(earlier); @@ -651,10 +658,11 @@ mod tests { } assert!(recv.try_recv().is_err()); assert_eq!(fetches.len(), 1); - assert_eq!(fetches[0].message, 49); - assert_eq!(fetches[0].flags(), &[Flag::Seen, Flag::Answered]); - assert_eq!(fetches[0].uid, Some(117)); - assert_eq!(fetches[0].body(), None); - assert_eq!(fetches[0].header(), None); + let first = fetches.iter().next().unwrap(); + assert_eq!(first.message, 49); + assert_eq!(first.flags(), &[Flag::Seen, Flag::Answered]); + assert_eq!(first.uid, Some(117)); + assert_eq!(first.body(), None); + assert_eq!(first.header(), None); } } diff --git a/src/types/fetch.rs b/src/types/fetch.rs index d30d57e..c1872cb 100644 --- a/src/types/fetch.rs +++ b/src/types/fetch.rs @@ -71,6 +71,16 @@ impl Fetches { pub fn iter(&self) -> Iter<'_, Fetch<'_>> { self.borrow_fetches().iter() } + + /// Get the number of [`Fetch`]es in this container. + pub fn len(&self) -> usize { + self.borrow_fetches().len() + } + + /// Return true if there are no [`Fetch`]es in the container. + pub fn is_empty(&self) -> bool { + self.borrow_fetches().is_empty() + } } /// An IMAP [`FETCH` response](https://tools.ietf.org/html/rfc3501#section-7.4.2) that contains diff --git a/src/types/name.rs b/src/types/name.rs index 825de59..e654561 100644 --- a/src/types/name.rs +++ b/src/types/name.rs @@ -48,6 +48,16 @@ impl Names { pub fn iter(&self) -> Iter<'_, Name<'_>> { self.borrow_names().iter() } + + /// Get the number of [`Name`]s in this container. + pub fn len(&self) -> usize { + self.borrow_names().len() + } + + /// Return true of there are no [`Name`]s in the container. + pub fn is_empty(&self) -> bool { + self.borrow_names().is_empty() + } } /// A name that matches a `LIST` or `LSUB` command. diff --git a/tests/imap_integration.rs b/tests/imap_integration.rs index c3eea0e..81a5efa 100644 --- a/tests/imap_integration.rs +++ b/tests/imap_integration.rs @@ -147,7 +147,7 @@ fn inbox() { // let's see that we can also fetch the e-mails let fetch = c.fetch("1", "(ALL UID)").unwrap(); assert_eq!(fetch.len(), 1); - let fetch = &fetch[0]; + let fetch = fetch.iter().next().unwrap(); assert_eq!(fetch.message, 1); assert_ne!(fetch.uid, None); assert_eq!(fetch.size, Some(138)); @@ -265,7 +265,7 @@ fn inbox_uid() { // let's see that we can also fetch the e-mail let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); assert_eq!(fetch.len(), 1); - let fetch = &fetch[0]; + let fetch = fetch.iter().next().unwrap(); assert_eq!(fetch.uid, Some(uid)); let e = fetch.envelope().unwrap(); assert_eq!(e.subject, Some(b"My first e-mail"[..].into())); @@ -325,7 +325,7 @@ fn append() { // fetch the e-mail let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); assert_eq!(fetch.len(), 1); - let fetch = &fetch[0]; + let fetch = fetch.iter().next().unwrap(); assert_eq!(fetch.uid, Some(uid)); let e = fetch.envelope().unwrap(); assert_eq!(e.subject, Some(b"My second e-mail"[..].into())); @@ -376,7 +376,7 @@ fn append_with_flags() { // fetch the e-mail let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); assert_eq!(fetch.len(), 1); - let fetch = &fetch[0]; + let fetch = fetch.iter().next().unwrap(); assert_eq!(fetch.uid, Some(uid)); let e = fetch.envelope().unwrap(); assert_eq!(e.subject, Some(b"My third e-mail"[..].into())); @@ -436,7 +436,7 @@ fn append_with_flags_and_date() { // fetch the e-mail let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); assert_eq!(fetch.len(), 1); - let fetch = &fetch[0]; + let fetch = fetch.iter().next().unwrap(); assert_eq!(fetch.uid, Some(uid)); assert_eq!(fetch.internal_date(), Some(date));