diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-10-16 21:01:58 +0200 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2018-10-24 07:12:55 +0200 |
| commit | a4ffe47c51d1617fc0e728c7bbd7e9b3738878cb (patch) | |
| tree | 017d0717ac8e2d5e0f6a46e47ea9e731ce63697b /src/directory.rs | |
| parent | b93d4cb749714699b44b2566e50a7086c2854ac7 (diff) | |
| download | mail-a4ffe47c51d1617fc0e728c7bbd7e9b3738878cb.tar.gz | |
some tries towards better lifetimes
Diffstat (limited to 'src/directory.rs')
| -rw-r--r-- | src/directory.rs | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/directory.rs b/src/directory.rs index b0bb415..4bf0a7a 100644 --- a/src/directory.rs +++ b/src/directory.rs @@ -1,7 +1,7 @@ use std::ops::Drop; use std::marker::PhantomData; -use utils::NewFromPtr; +use utils::FromPtr; use Database; use Filenames; @@ -9,30 +9,38 @@ use Filenames; use ffi; #[derive(Debug)] -pub struct Directory<'d>( - *mut ffi::notmuch_directory_t, - PhantomData<&'d Database>, -); +pub(crate) struct DirectoryPtr { + pub ptr: *mut ffi::notmuch_directory_t +} -impl<'d> Directory<'d>{ - pub fn child_directories(self: &'d Self) -> Filenames<'d>{ - Filenames::new(unsafe { - ffi::notmuch_directory_get_child_directories(self.0) - }) +impl Drop for DirectoryPtr { + fn drop(&mut self) { + unsafe { + ffi::notmuch_directory_destroy(self.ptr) + }; } } -impl<'d> NewFromPtr<*mut ffi::notmuch_directory_t> for Directory<'d> { - fn new(ptr: *mut ffi::notmuch_directory_t) -> Directory<'d> { - Directory(ptr, PhantomData) +#[derive(Debug)] +pub struct Directory<'d>{ + handle: DirectoryPtr, + phantom: PhantomData<&'d Database>, +} + +impl<'d> Directory<'d>{ + pub fn child_directories(self: &'d Self) -> Filenames<'d>{ + Filenames::from_ptr(unsafe { + ffi::notmuch_directory_get_child_directories(self.handle.ptr) + }) } } -impl<'d> Drop for Directory<'d> { - fn drop(self: &mut Self) { - unsafe { - ffi::notmuch_directory_destroy(self.0) - }; +impl<'d> FromPtr<*mut ffi::notmuch_directory_t> for Directory<'d> { + fn from_ptr(ptr: *mut ffi::notmuch_directory_t) -> Directory<'d> { + Directory{ + handle: DirectoryPtr{ptr}, + phantom: PhantomData + } } } |
