xmtp_api_d14n/endpoints/v3/mls/
subscribe_group_messages.rs1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6use xmtp_proto::mls_v1::SubscribeGroupMessagesRequest;
7use xmtp_proto::mls_v1::subscribe_group_messages_request::Filter as SubscribeFilter;
8
9#[derive(Debug, Builder, Default, Clone)]
11#[builder(build_fn(error = "BodyError"))]
12pub struct SubscribeGroupMessages {
13 #[builder(setter(each(name = "filter", into)))]
14 filters: Vec<SubscribeFilter>,
15}
16
17impl SubscribeGroupMessages {
18 pub fn builder() -> SubscribeGroupMessagesBuilder {
19 Default::default()
20 }
21}
22
23impl Endpoint for SubscribeGroupMessages {
24 type Output = crate::v3::types::V3ProtoGroupMessage;
25
26 fn grpc_endpoint(&self) -> Cow<'static, str> {
27 xmtp_proto::path_and_query::<SubscribeGroupMessagesRequest>()
28 }
29
30 fn body(&self) -> Result<Bytes, BodyError> {
31 let query = SubscribeGroupMessagesRequest {
32 filters: self.filters.clone(),
33 };
34 Ok(query.encode_to_vec().into())
35 }
36}
37
38#[cfg(test)]
39mod test {
40 use super::*;
41 use xmtp_api_grpc::test::NodeGoClient;
42 use xmtp_proto::{api::QueryStreamExt, prelude::*};
43
44 #[xmtp_common::test]
45 fn test_file_descriptor() {
46 let pnq = xmtp_proto::path_and_query::<SubscribeGroupMessagesRequest>();
47 println!("{}", pnq);
48 }
49
50 #[xmtp_common::test]
51 async fn test_subscribe_envelopes() {
52 let client = NodeGoClient::create();
53 let client = client.build().unwrap();
54
55 let mut endpoint = SubscribeGroupMessages::builder()
56 .filter(SubscribeFilter {
57 group_id: vec![],
58 id_cursor: 0,
59 })
60 .build()
61 .unwrap();
62 assert!(endpoint.subscribe(&client).await.is_ok());
63 }
64}