diff options
| -rw-r--r-- | src/lib.rs | 2 | ||||
| -rw-r--r-- | src/messages.rs | 35 | ||||
| -rw-r--r-- | src/query.rs | 15 |
3 files changed, 51 insertions, 1 deletions
@@ -10,8 +10,10 @@ pub mod error; pub mod database; pub mod directory; pub mod query; +pub mod messages; pub use database::Database; pub use query::Query; +pub use messages::Messages; pub use ffi::DatabaseMode; diff --git a/src/messages.rs b/src/messages.rs new file mode 100644 index 0000000..5144fb9 --- /dev/null +++ b/src/messages.rs @@ -0,0 +1,35 @@ +use std::{ + ops, + marker +}; + +use error::Result; + +use ffi; +use utils::{ + NewFromPtr, +}; +use Database; +use Query; + +#[derive(Debug)] +pub struct Messages<'q>( + // TODO: is this lifetime specifier correct? + pub(crate) *mut ffi::notmuch_messages_t, + marker::PhantomData<&'q Query<'q>> +); + +impl<'q> NewFromPtr<*mut ffi::notmuch_messages_t> for Messages<'q> { + fn new(ptr: *mut ffi::notmuch_messages_t) -> Messages<'q> { + Messages(ptr, marker::PhantomData) + } +} + + +impl<'q> ops::Drop for Messages<'q> { + fn drop(&mut self) { + unsafe { + ffi::notmuch_messages_destroy(self.0) + }; + } +} diff --git a/src/query.rs b/src/query.rs index 18d44d7..8e8514c 100644 --- a/src/query.rs +++ b/src/query.rs @@ -1,6 +1,7 @@ use std::{ ops, - marker + marker, + ptr, }; use error::Result; @@ -10,6 +11,7 @@ use utils::{ NewFromPtr, }; use Database; +use Messages; #[derive(Debug)] @@ -23,6 +25,17 @@ impl<'d> Query<'d> { pub fn create(db: &'d Database, query_string: &String) -> Result<Self> { db.create_query(query_string) } + + /// Filter messages according to the query and return + pub fn search_messages(self: &Self) -> Result<Messages> + { + let mut msgs = ptr::null_mut(); + unsafe { + msgs = ffi::notmuch_query_search_messages(self.0); + } + + Ok(Messages::new(msgs)) + } } impl<'d> NewFromPtr<*mut ffi::notmuch_query_t> for Query<'d> { |
