From 08aa3be11a25c8ccbdf4806a4a08c9267cae9140 Mon Sep 17 00:00:00 2001 From: Dirk Van Haerenborgh Date: Sun, 4 Nov 2018 19:42:46 +0100 Subject: start adding 'Ext' threads to enable more flexible supercow api --- src/directory.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/directory.rs') diff --git a/src/directory.rs b/src/directory.rs index 9bdae2d..c179eb8 100644 --- a/src/directory.rs +++ b/src/directory.rs @@ -1,6 +1,10 @@ +use std::ffi::{CStr, CString}; use std::ops::Drop; -use supercow::Phantomcow; +use std::path::Path; +use std::ptr; +use supercow::{Supercow, Phantomcow}; +use error::Result; use ffi; use Database; use Filenames; @@ -36,6 +40,30 @@ impl<'d> Directory<'d> { } } + pub fn new>, + P: AsRef>(owner: O, path: &P) -> Result>> { + let db = owner.into(); + let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap(); + + let mut dir = ptr::null_mut(); + try!( + unsafe { + ffi::notmuch_database_get_directory(db.handle.ptr, path_str.as_ptr(), &mut dir) + } + .as_result() + ); + + if dir.is_null() { + Ok(None) + } else { + Ok(Some(Directory { + handle: DirectoryPtr { ptr: dir }, + marker: Supercow::phantom(db), + })) + } + } + + pub fn child_directories(&self) -> Filenames { Filenames::from_ptr( unsafe { ffi::notmuch_directory_get_child_directories(self.handle.ptr) }, -- cgit v1.2.1