From b57e4d9df2195dab85a5b0f3de88726f1863dfc0 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Tue, 9 Nov 2021 20:35:52 -0800 Subject: [PATCH] notmuch: add show_part method. --- notmuch/src/lib.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/notmuch/src/lib.rs b/notmuch/src/lib.rs index 7bb783f..d52dc53 100644 --- a/notmuch/src/lib.rs +++ b/notmuch/src/lib.rs @@ -508,6 +508,25 @@ impl Notmuch { Ok(val) } + pub fn show_part(&self, query: &str, part: usize) -> Result { + let slice = self.run_notmuch([ + "show", + "--include-html=true", + "--entire-thread=true", + "--format=json", + &format!("--part={}", part), + query, + ])?; + // Notmuch returns JSON with invalid unicode. So we lossy convert it to a string here an + // use that for parsing in rust. + let s = String::from_utf8_lossy(&slice); + let mut deserializer = serde_json::Deserializer::from_str(&s); + deserializer.disable_recursion_limit(); + let val = serde::de::Deserialize::deserialize(&mut deserializer)?; + deserializer.end()?; + Ok(val) + } + pub fn show_original(&self, id: &MessageId) -> Result, NotmuchError> { self.show_original_part(id, 0) }