From 7c4488ffc0ef18365d6e2ddd07016cdd2db21660 Mon Sep 17 00:00:00 2001 From: Nathanael DEMACON Date: Tue, 19 Aug 2025 19:01:04 +0200 Subject: [PATCH 1/2] feat: expose gmail labels and msg id Signed-off-by: Nathanael DEMACON --- src/types/fetch.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/types/fetch.rs b/src/types/fetch.rs index f5e8ad7..7250c42 100644 --- a/src/types/fetch.rs +++ b/src/types/fetch.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use chrono::{DateTime, FixedOffset}; use imap_proto::types::{ AttributeValue, BodyStructure, Envelope, MessageSection, Response, SectionPath, @@ -228,4 +230,40 @@ impl Fetch { unreachable!() } } + + /// Extract the `X-GM-LABELS` of a `FETCH` response + /// + /// See [Access to Gmail labels: X-GM-LABELS](https://developers.google.com/gmail/imap/imap-extensions#access_to_labels_x-gm-labels) + /// for details. + pub fn gmail_labels(&self) -> Option<&Vec>> { + if let Response::Fetch(_, attrs) = self.response.parsed() { + attrs + .iter() + .filter_map(|av| match av { + AttributeValue::GmailLabels(gl) => Some(gl), + _ => None, + }) + .next() + } else { + unreachable!() + } + } + + /// Extract the `X-GM-MSGID` of a `FETCH` response + /// + /// See [Access to the Gmail unique message ID: X-GM-MSGID](https://developers.google.com/workspace/gmail/imap/imap-extensions#access_to_labels_x-gm-labels) + /// for details. + pub fn gmail_msg_id(&self) -> Option<&u64> { + if let Response::Fetch(_, attrs) = self.response.parsed() { + attrs + .iter() + .filter_map(|av| match av { + AttributeValue::GmailMsgId(id) => Some(id), + _ => None, + }) + .next() + } else { + unreachable!() + } + } } From e147f8f7e963b6848781b8e13231212fd8494426 Mon Sep 17 00:00:00 2001 From: l Date: Wed, 20 Aug 2025 16:26:32 +0000 Subject: [PATCH 2/2] Update src/types/fetch.rs --- src/types/fetch.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/fetch.rs b/src/types/fetch.rs index 7250c42..433002f 100644 --- a/src/types/fetch.rs +++ b/src/types/fetch.rs @@ -251,7 +251,7 @@ impl Fetch { /// Extract the `X-GM-MSGID` of a `FETCH` response /// - /// See [Access to the Gmail unique message ID: X-GM-MSGID](https://developers.google.com/workspace/gmail/imap/imap-extensions#access_to_labels_x-gm-labels) + /// See [Access to the Gmail unique message ID: X-GM-MSGID](https://developers.google.com/workspace/gmail/imap/imap-extensions#access_to_the_unique_message_id_x-gm-msgid) /// for details. pub fn gmail_msg_id(&self) -> Option<&u64> { if let Response::Fetch(_, attrs) = self.response.parsed() {