diff options
Diffstat (limited to 'src/database.rs')
| -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 b6f68a0..c26b5a8 100644 --- a/src/database.rs +++ b/src/database.rs @@ -230,6 +230,13 @@ impl Database { <Self as DatabaseExt>::find_message(self, message_id) } + pub fn find_message_by_filename<'d, P>(&'d self, filename: &P) -> Result<Option<Message<'d, Self>>> + where + P: AsRef<Path>, + { + <Self as DatabaseExt>::find_message_by_filename(self, filename) + } + pub fn remove_message<'d, P>(&'d self, path: &P) -> Result<()> where P: AsRef<Path>, @@ -314,6 +321,26 @@ pub trait DatabaseExt { } } + fn find_message_by_filename<'d, D, P>(database: D, filename: &P) -> Result<Option<Message<'d, Database>>> + where + D: Into<ScopedSupercow<'d, Database>>, + P: AsRef<Path> + { + let dbref = database.into(); + let path_str = CString::new(filename.as_ref().to_str().unwrap()).unwrap(); + + let mut msg = ptr::null_mut(); + unsafe { + ffi::notmuch_database_find_message_by_filename(dbref.ptr, path_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<ScopedSupercow<'d, Database>>, |
