xmtp_api_d14n/endpoints/v3/mls/
send_group_messages.rs

1use 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::{GroupMessageInput, SendGroupMessagesRequest};
7
8#[derive(Debug, Builder, Default)]
9#[builder(setter(strip_option), build_fn(error = "BodyError"))]
10pub struct SendGroupMessages {
11    #[builder(setter(into))]
12    messages: Vec<GroupMessageInput>,
13}
14
15impl SendGroupMessages {
16    pub fn builder() -> SendGroupMessagesBuilder {
17        Default::default()
18    }
19}
20
21impl Endpoint for SendGroupMessages {
22    type Output = ();
23    fn grpc_endpoint(&self) -> Cow<'static, str> {
24        xmtp_proto::path_and_query::<SendGroupMessagesRequest>()
25    }
26
27    fn body(&self) -> Result<Bytes, BodyError> {
28        Ok(SendGroupMessagesRequest {
29            messages: self.messages.clone(),
30        }
31        .encode_to_vec()
32        .into())
33    }
34}
35
36#[cfg(test)]
37mod test {
38    use crate::v3::SendGroupMessages;
39    use xmtp_api_grpc::test::NodeGoClient;
40    use xmtp_proto::xmtp::mls::api::v1::*;
41    use xmtp_proto::{api, prelude::*};
42
43    #[xmtp_common::test]
44    fn test_file_descriptor() {
45        let pnq = xmtp_proto::path_and_query::<SendGroupMessagesRequest>();
46        println!("{}", pnq);
47    }
48
49    #[xmtp_common::test]
50    fn test_grpc_endpoint_returns_correct_path() {
51        let endpoint = SendGroupMessages::default();
52        assert_eq!(
53            endpoint.grpc_endpoint(),
54            "/xmtp.mls.api.v1.MlsApi/SendGroupMessages"
55        );
56    }
57
58    #[xmtp_common::test]
59    async fn test_send_group_messages() {
60        let client = NodeGoClient::create();
61        let client = client.build().unwrap();
62        let endpoint = SendGroupMessages::builder()
63            .messages(vec![GroupMessageInput::default()])
64            .build()
65            .unwrap();
66
67        let result = api::ignore(endpoint).query(&client).await;
68        assert!(result.is_err());
69    }
70}