xmtp_api_d14n/endpoints/v3/mls/
query_group_messages.rs

1use 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}