diff options
Diffstat (limited to 'src/filenames.rs')
| -rw-r--r-- | src/filenames.rs | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/filenames.rs b/src/filenames.rs index d9e5bd8..5f369e8 100644 --- a/src/filenames.rs +++ b/src/filenames.rs @@ -4,35 +4,43 @@ use std::marker::PhantomData; use std::path::PathBuf; use std::ffi::CStr; -use utils::NewFromPtr; +use utils::FromPtr; use Database; use ffi; #[derive(Debug)] -pub struct Filenames<'d>( - *mut ffi::notmuch_filenames_t, - PhantomData<&'d Database>, -); - -impl<'d> NewFromPtr<*mut ffi::notmuch_filenames_t> for Filenames<'d> { - fn new(ptr: *mut ffi::notmuch_filenames_t) -> Filenames<'d> { - Filenames(ptr, PhantomData) - } +pub(crate) struct FilenamesPtr { + pub ptr: *mut ffi::notmuch_filenames_t } -impl<'d> Drop for Filenames<'d> { +impl Drop for FilenamesPtr { fn drop(self: &mut Self) { let valid = unsafe { - ffi::notmuch_filenames_valid(self.0) + ffi::notmuch_filenames_valid(self.ptr) }; if valid != 0 { unsafe { - ffi::notmuch_filenames_destroy(self.0) + ffi::notmuch_filenames_destroy(self.ptr) }; } } } + +#[derive(Debug)] +pub struct Filenames<'d>{ + pub(crate) handle: FilenamesPtr, + phantom: PhantomData<&'d Database> +} + +impl<'d> FromPtr<*mut ffi::notmuch_filenames_t> for Filenames<'d> { + fn from_ptr(ptr: *mut ffi::notmuch_filenames_t) -> Filenames<'d> { + Filenames{ + handle: FilenamesPtr{ptr}, + phantom: PhantomData + } + } +} impl<'d> Iterator for Filenames<'d> { type Item = PathBuf; @@ -40,7 +48,7 @@ impl<'d> Iterator for Filenames<'d> { fn next(self: &mut Self) -> Option<Self::Item> { let valid = unsafe { - ffi::notmuch_filenames_valid(self.0) + ffi::notmuch_filenames_valid(self.handle.ptr) }; if valid == 0{ @@ -48,8 +56,8 @@ impl<'d> Iterator for Filenames<'d> { } let ctag = unsafe { - let t = ffi::notmuch_filenames_get(self.0); - ffi::notmuch_filenames_move_to_next(self.0); + let t = ffi::notmuch_filenames_get(self.handle.ptr); + ffi::notmuch_filenames_move_to_next(self.handle.ptr); CStr::from_ptr(t) }; @@ -57,6 +65,5 @@ impl<'d> Iterator for Filenames<'d> { } } - unsafe impl<'d> Send for Filenames<'d>{} unsafe impl<'d> Sync for Filenames<'d>{} |
