xmtp_api_d14n/endpoints/d14n/
get_newest_envelopes.rs1use 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#[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
22impl 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}