xmtp_api_d14n/endpoints/v3/mls/
get_newest_group_message.rs1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6use xmtp_proto::xmtp::mls::api::v1::{GetNewestGroupMessageRequest, GetNewestGroupMessageResponse};
7
8#[derive(Debug, Builder, Default)]
9#[builder(setter(strip_option), build_fn(error = "BodyError"))]
10pub struct GetNewestGroupMessage {
11 #[builder(setter(into))]
12 group_ids: Vec<Vec<u8>>,
13 #[builder(default)]
14 include_content: bool,
15}
16
17impl GetNewestGroupMessage {
18 pub fn builder() -> GetNewestGroupMessageBuilder {
19 Default::default()
20 }
21}
22
23impl Endpoint for GetNewestGroupMessage {
24 type Output = GetNewestGroupMessageResponse;
25
26 fn grpc_endpoint(&self) -> Cow<'static, str> {
27 xmtp_proto::path_and_query::<GetNewestGroupMessageRequest>()
28 }
29
30 fn body(&self) -> Result<Bytes, BodyError> {
31 Ok(GetNewestGroupMessageRequest {
32 group_ids: self.group_ids.clone(),
33 include_content: self.include_content,
34 }
35 .encode_to_vec()
36 .into())
37 }
38}
39
40#[cfg(test)]
41mod test {
42 use crate::v3::GetNewestGroupMessage;
43 use xmtp_api_grpc::test::NodeGoClient;
44 use xmtp_proto::prelude::*;
45 use xmtp_proto::xmtp::mls::api::v1::*;
46
47 #[xmtp_common::test]
48 fn test_file_descriptor() {
49 let pnq = xmtp_proto::path_and_query::<GetNewestGroupMessageRequest>();
50 println!("{}", pnq);
51 }
52
53 #[xmtp_common::test]
54 async fn test_get_newest_group_message() {
55 let client = NodeGoClient::create();
56 let client = client.build().unwrap();
57 let mut endpoint = GetNewestGroupMessage::builder()
58 .group_ids(vec![vec![1, 2, 3], vec![4, 5, 6]])
59 .include_content(true)
60 .build()
61 .unwrap();
62
63 let result = endpoint.query(&client).await.unwrap();
64 assert_eq!(
65 result.responses.len(),
66 2,
67 "Should return response for each group ID"
68 );
69 }
70
71 #[xmtp_common::test]
72 fn test_get_newest_group_message_builder() {
73 let endpoint = GetNewestGroupMessage::builder()
75 .group_ids(vec![vec![1, 2, 3]])
76 .build()
77 .unwrap();
78
79 assert_eq!(endpoint.group_ids, vec![vec![1, 2, 3]]);
80 assert!(!endpoint.include_content);
81 }
82
83 #[xmtp_common::test]
84 fn test_get_newest_group_message_builder_with_content() {
85 let endpoint = GetNewestGroupMessage::builder()
87 .group_ids(vec![vec![7, 8, 9], vec![10, 11, 12]])
88 .include_content(true)
89 .build()
90 .unwrap();
91
92 assert_eq!(endpoint.group_ids, vec![vec![7, 8, 9], vec![10, 11, 12]]);
93 assert!(endpoint.include_content);
94 }
95
96 #[xmtp_common::test]
97 fn test_get_newest_group_message_endpoints() {
98 let endpoint = GetNewestGroupMessage::builder()
99 .group_ids(vec![vec![1]])
100 .build()
101 .unwrap();
102
103 assert_eq!(
104 endpoint.grpc_endpoint(),
105 "/xmtp.mls.api.v1.MlsApi/GetNewestGroupMessage"
106 );
107 }
108}