From cc92fea48a3c444822c14ccb6cdfd748f065ef27 Mon Sep 17 00:00:00 2001 From: Dirk Van Haerenborgh Date: Mon, 5 Nov 2018 08:41:39 +0100 Subject: implement StreamingIteratorExt for iterator types --- src/messages.rs | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'src/messages.rs') 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> { - let valid = unsafe { ffi::notmuch_messages_valid(self.handle.ptr) }; + >>::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>>>(messages: S) -> Option>{ + 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))) } } -- cgit v1.2.1