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