aboutsummaryrefslogtreecommitdiffstats
path: root/notmuch/src/directory.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-04-25 16:58:17 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-04-25 16:58:17 +0200
commit72c2b83748a601d02c82d5bcb4220d3b238281cc (patch)
tree38acb17db4a48fc9f340680ea5b86c6cd49d8f2a /notmuch/src/directory.rs
parent51fa75397dda2c280f29760e7b525caefc03642e (diff)
parent2231a5cf6cdeb90c1cdb75d161a0063d4a385576 (diff)
downloadmail-72c2b83748a601d02c82d5bcb4220d3b238281cc.tar.gz
Add 'notmuch/' from commit '2231a5cf6cdeb90c1cdb75d161a0063d4a385576'
git-subtree-dir: notmuch git-subtree-mainline: 51fa75397dda2c280f29760e7b525caefc03642e git-subtree-split: 2231a5cf6cdeb90c1cdb75d161a0063d4a385576
Diffstat (limited to 'notmuch/src/directory.rs')
-rw-r--r--notmuch/src/directory.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/notmuch/src/directory.rs b/notmuch/src/directory.rs
new file mode 100644
index 0000000..1c8a3df
--- /dev/null
+++ b/notmuch/src/directory.rs
@@ -0,0 +1,57 @@
+use std::ops::Drop;
+use supercow::Supercow;
+
+use ffi;
+use Database;
+use Filenames;
+use FilenamesOwner;
+use utils::{ScopedSupercow, ScopedPhantomcow};
+
+
+#[derive(Debug)]
+pub struct Directory<'d> {
+ ptr: *mut ffi::notmuch_directory_t,
+ marker: ScopedPhantomcow<'d, Database>,
+}
+
+impl<'d> Drop for Directory<'d> {
+ fn drop(&mut self) {
+ unsafe { ffi::notmuch_directory_destroy(self.ptr) };
+ }
+}
+
+impl<'d> FilenamesOwner for Directory<'d> {}
+
+impl<'d> Directory<'d> {
+ pub(crate) fn from_ptr<O>(ptr: *mut ffi::notmuch_directory_t, owner: O) -> Directory<'d>
+ where
+ O: Into<ScopedPhantomcow<'d, Database>>,
+ {
+ Directory {
+ ptr,
+ marker: owner.into(),
+ }
+ }
+
+ pub fn child_directories(&self) -> Filenames<Self> {
+ <Self as DirectoryExt>::child_directories(self)
+ }
+}
+
+pub trait DirectoryExt<'d> {
+ fn child_directories<'s, S>(directory: S) -> Filenames<'s, Directory<'d>>
+ where
+ S: Into<ScopedSupercow<'s, Directory<'d>>>,
+ {
+ let dir = directory.into();
+ Filenames::from_ptr(
+ unsafe { ffi::notmuch_directory_get_child_directories(dir.ptr) },
+ Supercow::phantom(dir),
+ )
+ }
+}
+
+impl<'d> DirectoryExt<'d> for Directory<'d> {}
+
+unsafe impl<'d> Send for Directory<'d> {}
+unsafe impl<'d> Sync for Directory<'d> {}