diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-18 12:37:19 +0200 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-18 12:37:19 +0200 |
| commit | 469e67f7ac8e6fad605e03a22c2f0234674f66e6 (patch) | |
| tree | 31d7ba7962d3cf734b4ba4891ffc5a1529ae9c0b | |
| parent | 5814ba78327e8194c4999c73d4334a4f840f75fa (diff) | |
| download | mail-469e67f7ac8e6fad605e03a22c2f0234674f66e6.tar.gz | |
add database_find_message
| -rw-r--r-- | src/database.rs | 27 |
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>>, |
