aboutsummaryrefslogtreecommitdiffstats
path: root/src/filenames.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/filenames.rs')
-rw-r--r--src/filenames.rs41
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>{}