aboutsummaryrefslogtreecommitdiffstats
path: root/src/directory.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2018-10-16 21:01:58 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2018-10-24 07:12:55 +0200
commita4ffe47c51d1617fc0e728c7bbd7e9b3738878cb (patch)
tree017d0717ac8e2d5e0f6a46e47ea9e731ce63697b /src/directory.rs
parentb93d4cb749714699b44b2566e50a7086c2854ac7 (diff)
downloadmail-a4ffe47c51d1617fc0e728c7bbd7e9b3738878cb.tar.gz
some tries towards better lifetimes
Diffstat (limited to 'src/directory.rs')
-rw-r--r--src/directory.rs44
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
+ }
}
}