aboutsummaryrefslogtreecommitdiffstats
path: root/src/messages.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2018-11-05 08:41:39 +0100
committerDirk Van Haerenborgh <vhdirk@gmail.com>2018-11-05 08:41:39 +0100
commitcc92fea48a3c444822c14ccb6cdfd748f065ef27 (patch)
treeec0ab81b707e312a31da90b49c1b72e47d160be4 /src/messages.rs
parent942740b143c8f07f402da8e20338c8f769fe5447 (diff)
downloadmail-cc92fea48a3c444822c14ccb6cdfd748f065ef27.tar.gz
implement StreamingIteratorExt for iterator types
Diffstat (limited to 'src/messages.rs')
-rw-r--r--src/messages.rs35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/messages.rs b/src/messages.rs
index 7aa1c45..7a0a48c 100644
--- a/src/messages.rs
+++ b/src/messages.rs
@@ -3,7 +3,7 @@ use std::ops::Drop;
use supercow::{Phantomcow, Supercow};
use ffi;
-use utils::StreamingIterator;
+use utils::{StreamingIterator, StreamingIteratorExt};
use Message;
use MessageOwner;
use Tags;
@@ -56,15 +56,6 @@ impl<'o, Owner: MessagesOwner + 'o> Messages<'o, Owner> {
}
}
-
-pub trait MessagesExt<'o, Owner: MessagesOwner + 'o>{
-
-}
-
-impl<'o, Owner: MessagesOwner + 'o> MessagesExt<'o, Owner> for Messages<'o, Owner>{
-
-}
-
impl<'o, Owner: MessagesOwner + 'o> MessageOwner for Messages<'o, Owner> {}
impl<'o, Owner: MessagesOwner + 'o> TagsOwner for Messages<'o, Owner> {}
@@ -94,19 +85,35 @@ impl<'s, 'o: 's, Owner: MessagesOwner + 'o> StreamingIterator<'s, Message<'s, Se
for Messages<'o, Owner>
{
fn next(&'s mut self) -> Option<Message<'s, Self>> {
- let valid = unsafe { ffi::notmuch_messages_valid(self.handle.ptr) };
+ <Self as StreamingIteratorExt<'s, Message<'s, Self>>>::next(Supercow::borrowed(self))
+ }
+}
+
+pub trait MessagesExt<'o, Owner: MessagesOwner + 'o> {
+
+}
+
+impl<'o, Owner: MessagesOwner + 'o> MessagesExt<'o, Owner> for Messages<'o, Owner>{
+
+}
+
+impl<'s, 'o: 's, Owner: MessagesOwner + 'o> StreamingIteratorExt<'s, Message<'s, Self>> for Messages<'o, Owner>
+{
+ fn next<S: Into<Supercow<'s, Messages<'o, Owner>>>>(messages: S) -> Option<Message<'s, Self>>{
+ let messagesref = messages.into();
+ let valid = unsafe { ffi::notmuch_messages_valid(messagesref.handle.ptr) };
if valid == 0 {
return None;
}
let cmsg = unsafe {
- let msg = ffi::notmuch_messages_get(self.handle.ptr);
- ffi::notmuch_messages_move_to_next(self.handle.ptr);
+ let msg = ffi::notmuch_messages_get(messagesref.handle.ptr);
+ ffi::notmuch_messages_move_to_next(messagesref.handle.ptr);
msg
};
- Some(Message::from_ptr(cmsg, Supercow::borrowed(self)))
+ Some(Message::from_ptr(cmsg, Supercow::phantom(messagesref)))
}
}