From 161710e1f9725a4cff895b68a51a9b635c3b8382 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Oct 2025 07:42:32 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(message-list):=20?= =?UTF-8?q?extract=20helper=20to=20append=20messages=20from=20ListMessages?= =?UTF-8?q?Response=20and=20add=20unit=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/message_list.rs | 48 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/src/message_list.rs b/src/message_list.rs index d0b15ff..3a665c1 100644 --- a/src/message_list.rs +++ b/src/message_list.rs @@ -345,6 +345,19 @@ pub trait MessageList { fn set_max_results(&mut self, value: u32); } +impl GmailClient { + /// Append any message IDs from a ListMessagesResponse into the provided messages vector. + fn append_list_to_messages(out: &mut Vec, list: &ListMessagesResponse) { + if let Some(msgs) = &list.messages { + let mut list_ids: Vec = msgs + .iter() + .flat_map(|item| item.id.as_deref().map(MessageSummary::new)) + .collect(); + out.append(&mut list_ids); + } + } +} + impl MessageList for GmailClient { /// Set the maximum results fn set_max_results(&mut self, value: u32) { @@ -473,13 +486,7 @@ impl MessageList for GmailClient { return Ok(list); } - if let Some(msgs) = &list.messages { - let mut list_ids: Vec = msgs - .iter() - .flat_map(|item| item.id.as_deref().map(MessageSummary::new)) - .collect(); - self.messages.append(&mut list_ids); - } + Self::append_list_to_messages(&mut self.messages, &list); Ok(list) } @@ -624,4 +631,31 @@ mod tests { assert_eq!(ml.message_ids(), vec!["abc", "def"]); assert_eq!(ml.messages().len(), 2); } + + #[test] + fn append_list_to_messages_extracts_ids() { + use google_gmail1::api::Message; + let mut out = Vec::::new(); + let list = ListMessagesResponse { + messages: Some(vec![ + Message { + id: Some("m1".into()), + ..Default::default() + }, + Message { + id: None, + ..Default::default() + }, + Message { + id: Some("m2".into()), + ..Default::default() + }, + ]), + ..Default::default() + }; + + GmailClient::append_list_to_messages(&mut out, &list); + let ids: Vec<_> = out.iter().map(|m| m.id().to_string()).collect(); + assert_eq!(ids, vec!["m1", "m2"]); + } }