xmtp_api_d14n/endpoints/v3/mls/
query_group_messages.rs1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint, Pageable};
6use xmtp_proto::mls_v1::QueryGroupMessagesResponse;
7use xmtp_proto::xmtp::mls::api::v1::{PagingInfo, QueryGroupMessagesRequest};
8
9#[derive(Debug, Builder, Default)]
10#[builder(setter(strip_option), build_fn(error = "BodyError"))]
11pub struct QueryGroupMessages {
12 #[builder(setter(into))]
13 group_id: Vec<u8>,
14 paging_info: Option<PagingInfo>,
15}
16
17impl QueryGroupMessages {
18 pub fn builder() -> QueryGroupMessagesBuilder {
19 Default::default()
20 }
21}
22
23impl Endpoint for QueryGroupMessages {
24 type Output = QueryGroupMessagesResponse;
25 fn grpc_endpoint(&self) -> Cow<'static, str> {
26 xmtp_proto::path_and_query::<QueryGroupMessagesRequest>()
27 }
28
29 fn body(&self) -> Result<Bytes, BodyError> {
30 Ok(QueryGroupMessagesRequest {
31 group_id: self.group_id.clone(),
32 paging_info: self.paging_info,
33 }
34 .encode_to_vec()
35 .into())
36 }
37}
38
39impl Pageable for QueryGroupMessages {
40 fn set_cursor(&mut self, cursor: u64) {
41 if let Some(ref mut p) = self.paging_info {
42 p.id_cursor = cursor;
43 }
44 }
45}
46
47#[cfg(test)]
48mod test {
49 use crate::v3::QueryGroupMessages;
50 use xmtp_api_grpc::test::NodeGoClient;
51 use xmtp_proto::prelude::*;
52 use xmtp_proto::xmtp::mls::api::v1::*;
53
54 #[xmtp_common::test]
55 fn test_file_descriptor() {
56 let pnq = xmtp_proto::path_and_query::<QueryGroupMessagesRequest>();
57 println!("{}", pnq);
58 }
59
60 #[xmtp_common::test]
61 fn test_grpc_endpoint_returns_correct_path() {
62 let endpoint = QueryGroupMessages::default();
63 assert_eq!(
64 endpoint.grpc_endpoint(),
65 "/xmtp.mls.api.v1.MlsApi/QueryGroupMessages"
66 );
67 }
68
69 #[xmtp_common::test]
70 async fn test_query_group_messages() {
71 let client = NodeGoClient::create();
72 let client = client.build().unwrap();
73 let mut endpoint = QueryGroupMessages::builder()
74 .group_id(vec![1, 2, 3])
75 .paging_info(PagingInfo::default())
76 .build()
77 .unwrap();
78
79 let result: QueryGroupMessagesResponse = endpoint.query(&client).await.unwrap();
80 assert_eq!(result.messages.len(), 0);
81 }
82}