diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-18 15:38:17 +0200 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-18 15:38:17 +0200 |
| commit | cf3b912a94dd18cb3f5af664e11a0e2391d16b0b (patch) | |
| tree | 5903d4d16bbe11df348f14263c215337491f7a88 | |
| parent | 5ad80a002ef0a2ace544faf058fe82b6cdd83fb0 (diff) | |
| download | mail-cf3b912a94dd18cb3f5af664e11a0e2391d16b0b.tar.gz | |
database: implement find_message_by_filename
| -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>>, |
