aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2018-10-25 08:02:04 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2018-10-25 08:02:04 +0200
commitbd1a184600a0d42c36d7d2fc5f010692d0ab46aa (patch)
treeb377aaea58b99ef56a98b58f0bb30ba5d06f275f /src/thread.rs
parenta4ffe47c51d1617fc0e728c7bbd7e9b3738878cb (diff)
downloadmail-bd1a184600a0d42c36d7d2fc5f010692d0ab46aa.tar.gz
more correct lifetimes
Diffstat (limited to 'src/thread.rs')
-rw-r--r--src/thread.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/thread.rs b/src/thread.rs
index 60782f5..1cf163e 100644
--- a/src/thread.rs
+++ b/src/thread.rs
@@ -8,6 +8,11 @@ use utils::{
use Query;
use Messages;
use Tags;
+use messages::MessagesOwner;
+use tags::TagsOwner;
+
+pub trait ThreadOwner{}
+
#[derive(Debug)]
pub(crate) struct ThreadPtr {
@@ -24,13 +29,17 @@ impl Drop for ThreadPtr {
#[derive(Debug)]
-pub struct Thread<'d:'q, 'q>{
+pub struct Thread<'o, Owner: ThreadOwner>{
pub(crate) handle: ThreadPtr,
- phantom: PhantomData<&'q Query<'d>>,
+ phantom: PhantomData<&'o Owner>,
}
-impl<'d, 'q> FromPtr<*mut ffi::notmuch_thread_t> for Thread<'d, 'q> {
- fn from_ptr(ptr: *mut ffi::notmuch_thread_t) -> Thread<'d, 'q> {
+impl<'o, Owner: ThreadOwner> MessagesOwner for Thread<'o, Owner>{}
+impl<'o, Owner: ThreadOwner> TagsOwner for Thread<'o, Owner>{}
+
+
+impl<'o, Owner: ThreadOwner> FromPtr<*mut ffi::notmuch_thread_t> for Thread<'o, Owner> {
+ fn from_ptr(ptr: *mut ffi::notmuch_thread_t) -> Thread<'o, Owner> {
Thread{
handle: ThreadPtr{ptr},
phantom: PhantomData
@@ -38,7 +47,7 @@ impl<'d, 'q> FromPtr<*mut ffi::notmuch_thread_t> for Thread<'d, 'q> {
}
}
-impl<'d, 'q> Thread<'d, 'q>{
+impl<'o, Owner: ThreadOwner> Thread<'o, Owner>{
pub fn id(self: &Self) -> String{
let tid = unsafe {
@@ -62,7 +71,7 @@ impl<'d, 'q> Thread<'d, 'q>{
}
- pub fn toplevel_messages(self: &Self) -> Messages{
+ pub fn toplevel_messages(self: &Self) -> Messages<Self>{
Messages::from_ptr(unsafe {
ffi::notmuch_thread_get_toplevel_messages(self.handle.ptr)
})
@@ -70,7 +79,7 @@ impl<'d, 'q> Thread<'d, 'q>{
/// Get a `Messages` iterator for all messages in 'thread' in
/// oldest-first order.
- pub fn messages(self: &Self) -> Messages{
+ pub fn messages(self: &Self) -> Messages<Self>{
Messages::from_ptr(unsafe {
ffi::notmuch_thread_get_messages(self.handle.ptr)
})
@@ -115,5 +124,5 @@ impl<'d, 'q> Thread<'d, 'q>{
}
-unsafe impl<'d, 'q> Send for Thread<'d, 'q> {}
-unsafe impl<'d, 'q> Sync for Thread<'d, 'q> {}
+unsafe impl<'o, Owner: ThreadOwner> Send for Thread<'o, Owner> {}
+unsafe impl<'o, Owner: ThreadOwner> Sync for Thread<'o, Owner> {}