aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-18 12:37:19 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-18 12:37:19 +0200
commit469e67f7ac8e6fad605e03a22c2f0234674f66e6 (patch)
tree31d7ba7962d3cf734b4ba4891ffc5a1529ae9c0b
parent5814ba78327e8194c4999c73d4334a4f840f75fa (diff)
downloadmail-469e67f7ac8e6fad605e03a22c2f0234674f66e6.tar.gz
add database_find_message
-rw-r--r--src/database.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/database.rs b/src/database.rs
index 027a43f..d591575 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -15,6 +15,8 @@ use Directory;
use Query;
use Tags;
use TagsOwner;
+use Message;
+use MessageOwner;
use utils::ScopedSupercow;
@@ -43,6 +45,7 @@ impl Drop for Database {
}
impl TagsOwner for Database {}
+impl MessageOwner for Database {}
impl Database {
pub fn create<P>(path: &P) -> Result<Self>
@@ -222,6 +225,11 @@ impl Database {
<Self as DatabaseExt>::all_tags(self)
}
+ pub fn find_message<'d, P>(&'d self, message_id: &str) -> Result<Option<Message<'d, Self>>>
+ {
+ <Self as DatabaseExt>::find_message(self, message_id)
+ }
+
pub fn remove_message<'d, P>(&'d self, path: &P) -> Result<()>
where
P: AsRef<Path>,
@@ -275,6 +283,25 @@ pub trait DatabaseExt {
}
}
+ fn find_message<'d, D>(database: D, message_id: &str) -> Result<Option<Message<'d, Database>>>
+ where
+ D: Into<ScopedSupercow<'d, Database>>
+ {
+ let dbref = database.into();
+ let message_id_str = CString::new(message_id).unwrap();
+
+ let mut msg = ptr::null_mut();
+ unsafe {
+ ffi::notmuch_database_find_message(dbref.ptr, message_id_str.as_ptr(), &mut msg)
+ }.as_result()?;
+
+ if msg.is_null() {
+ Ok(None)
+ } else {
+ Ok(Some(Message::from_ptr(msg, Supercow::phantom(dbref))))
+ }
+ }
+
fn remove_message<'d, D, P>(database: D, path: &P) -> Result<()>
where
D: Into<Supercow<'d, Database>>,