notmuch 0.8.0

Rust interface and bindings for notmuch
Documentation
use std::ops::Drop;
use std::rc::Rc;

use ffi;
use Database;
use Filenames;

#[derive(Debug)]
pub(crate) struct DirectoryPtr(*mut ffi::notmuch_directory_t);

#[derive(Debug, Clone)]
pub struct Directory {
    ptr: Rc<DirectoryPtr>,
    owner: Database,
}

impl Drop for Directory {
    fn drop(&mut self) {
        unsafe { ffi::notmuch_directory_destroy(self.ptr.0) };
    }
}

impl Directory {
    pub(crate) fn from_ptr(
        ptr: *mut ffi::notmuch_directory_t,
        owner: Database,
    ) -> Directory {
        Directory {
            ptr: Rc::new(DirectoryPtr(ptr)),
            owner,
        }
    }

    fn child_directories(&self) -> Filenames {
        Filenames::from_ptr(
            unsafe { ffi::notmuch_directory_get_child_directories(self.ptr.0) },
            self.clone(),
        )
    }
}