xmtp_api_d14n/endpoints/v3/mls/
subscribe_welcome_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::mls_v1::SubscribeWelcomeMessagesRequest;
7use xmtp_proto::mls_v1::subscribe_welcome_messages_request::Filter as SubscribeFilter;
8
9/// Query a single thing
10#[derive(Debug, Builder, Default, Clone)]
11#[builder(build_fn(error = "BodyError"))]
12pub struct SubscribeWelcomeMessages {
13    #[builder(setter(each(name = "filter", into)))]
14    filters: Vec<SubscribeFilter>,
15}
16
17impl SubscribeWelcomeMessages {
18    pub fn builder() -> SubscribeWelcomeMessagesBuilder {
19        Default::default()
20    }
21}
22
23impl Endpoint for SubscribeWelcomeMessages {
24    type Output = crate::v3::types::V3ProtoWelcomeMessage;
25
26    fn grpc_endpoint(&self) -> Cow<'static, str> {
27        xmtp_proto::path_and_query::<SubscribeWelcomeMessagesRequest>()
28    }
29
30    fn body(&self) -> Result<Bytes, BodyError> {
31        let query = SubscribeWelcomeMessagesRequest {
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::<SubscribeWelcomeMessagesRequest>();
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 = SubscribeWelcomeMessages::builder()
56            .filter(SubscribeFilter {
57                installation_key: vec![],
58                id_cursor: 0,
59            })
60            .build()
61            .unwrap();
62        assert!(endpoint.subscribe(&client).await.is_ok());
63    }
64}