xmtp_api_d14n/endpoints/d14n/
get_newest_envelopes.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::xmtpv4::message_api::{GetNewestEnvelopeRequest, GetNewestEnvelopeResponse};
7
8/// Query a single thing
9#[derive(Debug, Builder, Default, Clone)]
10#[builder(build_fn(error = "BodyError"))]
11pub struct GetNewestEnvelopes {
12    #[builder(setter(each(name = "topic", into)))]
13    topics: Vec<Vec<u8>>,
14}
15
16impl GetNewestEnvelopes {
17    pub fn builder() -> GetNewestEnvelopesBuilder {
18        Default::default()
19    }
20}
21
22/// NOTE:insipx
23/// Will get latest message for each topic
24/// if there is no latest message, returns null in place of that message
25/// ensure ordering is not affected by this null variable, or that extractors
26/// do no unintentionally skip nulls when they should preserve length.
27impl Endpoint for GetNewestEnvelopes {
28    type Output = GetNewestEnvelopeResponse;
29    fn grpc_endpoint(&self) -> Cow<'static, str> {
30        xmtp_proto::path_and_query::<GetNewestEnvelopeRequest>()
31    }
32
33    fn body(&self) -> Result<Bytes, BodyError> {
34        let query = GetNewestEnvelopeRequest {
35            topics: self.topics.clone(),
36        };
37        Ok(query.encode_to_vec().into())
38    }
39}
40
41#[cfg(test)]
42mod test {
43    use xmtp_api_grpc::test::XmtpdClient;
44    use xmtp_proto::{api, prelude::*};
45
46    #[xmtp_common::test]
47    fn test_file_descriptor() {
48        use xmtp_proto::xmtp::xmtpv4::message_api::GetNewestEnvelopeRequest;
49        let pnq = xmtp_proto::path_and_query::<GetNewestEnvelopeRequest>();
50        println!("{}", pnq);
51    }
52
53    #[xmtp_common::test]
54    fn test_grpc_endpoint_returns_correct_path() {
55        use crate::d14n::GetNewestEnvelopes;
56        let endpoint = GetNewestEnvelopes::default();
57        assert_eq!(
58            endpoint.grpc_endpoint(),
59            "/xmtp.xmtpv4.message_api.ReplicationApi/GetNewestEnvelope"
60        );
61    }
62
63    #[xmtp_common::test]
64    async fn get_newest_envelopes() {
65        use crate::d14n::GetNewestEnvelopes;
66
67        let client = XmtpdClient::create();
68        let client = client.build().unwrap();
69
70        let endpoint = GetNewestEnvelopes::builder().topic(vec![]).build().unwrap();
71        api::ignore(endpoint).query(&client).await.unwrap();
72    }
73}