diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-11-05 08:41:39 +0100 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-11-05 08:41:39 +0100 |
| commit | cc92fea48a3c444822c14ccb6cdfd748f065ef27 (patch) | |
| tree | ec0ab81b707e312a31da90b49c1b72e47d160be4 /src/messages.rs | |
| parent | 942740b143c8f07f402da8e20338c8f769fe5447 (diff) | |
| download | mail-cc92fea48a3c444822c14ccb6cdfd748f065ef27.tar.gz | |
implement StreamingIteratorExt for iterator types
Diffstat (limited to 'src/messages.rs')
| -rw-r--r-- | src/messages.rs | 35 |
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))) } } |
