aboutsummaryrefslogtreecommitdiffstats
path: root/src/filenames.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2018-11-01 21:55:00 +0100
committerDirk Van Haerenborgh <vhdirk@gmail.com>2018-11-01 21:55:00 +0100
commit7d2be237297c16628cb3d58774e808cac9c92fc1 (patch)
tree55cb240828bac9968f94166e740b567b66928e3b /src/filenames.rs
parent2932d67d87fa2ff41fcdf46ce269ba5b49294930 (diff)
downloadmail-7d2be237297c16628cb3d58774e808cac9c92fc1.tar.gz
improve lifetime management with supercow
Diffstat (limited to 'src/filenames.rs')
-rw-r--r--src/filenames.rs53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/filenames.rs b/src/filenames.rs
index 5083742..ae90280 100644
--- a/src/filenames.rs
+++ b/src/filenames.rs
@@ -1,45 +1,43 @@
-use std::ops::Drop;
+use std::ffi::CStr;
use std::iter::Iterator;
-use std::marker::PhantomData;
+use std::ops::Drop;
use std::path::PathBuf;
-use std::ffi::CStr;
-use utils::FromPtr;
-use Database;
+use supercow::Phantomcow;
+
use ffi;
-pub trait FilenamesOwner{}
+pub trait FilenamesOwner {}
#[derive(Debug)]
pub(crate) struct FilenamesPtr {
- pub ptr: *mut ffi::notmuch_filenames_t
+ pub ptr: *mut ffi::notmuch_filenames_t,
}
impl Drop for FilenamesPtr {
fn drop(self: &mut Self) {
- let valid = unsafe {
- ffi::notmuch_filenames_valid(self.ptr)
- };
+ let valid = unsafe { ffi::notmuch_filenames_valid(self.ptr) };
if valid != 0 {
- unsafe {
- ffi::notmuch_filenames_destroy(self.ptr)
- };
+ unsafe { ffi::notmuch_filenames_destroy(self.ptr) };
}
}
}
-
+
#[derive(Debug)]
-pub struct Filenames<'o, Owner: FilenamesOwner + 'o>{
+pub struct Filenames<'o, Owner: FilenamesOwner + 'o> {
pub(crate) handle: FilenamesPtr,
- pub(crate) phantom: PhantomData<&'o Owner>
+ pub(crate) marker: Phantomcow<'o, Owner>,
}
-impl<'o, Owner: FilenamesOwner + 'o> FromPtr<*mut ffi::notmuch_filenames_t> for Filenames<'o, Owner> {
- fn from_ptr(ptr: *mut ffi::notmuch_filenames_t) -> Filenames<'o, Owner> {
- Filenames{
- handle: FilenamesPtr{ptr},
- phantom: PhantomData
+impl<'o, Owner: FilenamesOwner + 'o> Filenames<'o, Owner> {
+ pub fn from_ptr<O: Into<Phantomcow<'o, Owner>>>(
+ ptr: *mut ffi::notmuch_filenames_t,
+ owner: O,
+ ) -> Filenames<'o, Owner> {
+ Filenames {
+ handle: FilenamesPtr { ptr },
+ marker: owner.into(),
}
}
}
@@ -48,13 +46,10 @@ impl<'o, Owner: FilenamesOwner + 'o> Iterator for Filenames<'o, Owner> {
type Item = PathBuf;
fn next(self: &mut Self) -> Option<Self::Item> {
+ let valid = unsafe { ffi::notmuch_filenames_valid(self.handle.ptr) };
- let valid = unsafe {
- ffi::notmuch_filenames_valid(self.handle.ptr)
- };
-
- if valid == 0{
- return None
+ if valid == 0 {
+ return None;
}
let ctag = unsafe {
@@ -67,5 +62,5 @@ impl<'o, Owner: FilenamesOwner + 'o> Iterator for Filenames<'o, Owner> {
}
}
-unsafe impl<'o, Owner: FilenamesOwner + 'o> Send for Filenames<'o, Owner>{}
-unsafe impl<'o, Owner: FilenamesOwner + 'o> Sync for Filenames<'o, Owner>{}
+unsafe impl<'o, Owner: FilenamesOwner + 'o> Send for Filenames<'o, Owner> {}
+unsafe impl<'o, Owner: FilenamesOwner + 'o> Sync for Filenames<'o, Owner> {}