xmtp_api_d14n/endpoints/d14n/
get_nodes.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::payer_api::{GetNodesRequest, GetNodesResponse};
7
8#[derive(Debug, Builder, Default)]
9#[builder(setter(strip_option), build_fn(error = "BodyError"))]
10pub struct GetNodes {}
11
12impl GetNodes {
13    pub fn builder() -> GetNodesBuilder {
14        Default::default()
15    }
16}
17
18impl Endpoint for GetNodes {
19    type Output = GetNodesResponse;
20
21    fn grpc_endpoint(&self) -> Cow<'static, str> {
22        xmtp_proto::path_and_query::<GetNodesRequest>()
23    }
24
25    fn body(&self) -> Result<Bytes, BodyError> {
26        Ok(GetNodesRequest {}.encode_to_vec().into())
27    }
28}
29
30#[cfg(test)]
31mod test {
32    use super::*;
33    use crate::d14n::GetNodes;
34    use xmtp_api_grpc::test::{GatewayClient, XmtpdClient};
35    use xmtp_proto::prelude::*;
36
37    #[xmtp_common::test]
38    fn test_file_descriptor() {
39        let pnq = xmtp_proto::path_and_query::<GetNodesRequest>();
40        println!("{}", pnq);
41    }
42
43    #[xmtp_common::test]
44    async fn test_get_nodes() {
45        let mut endpoint = GetNodes::builder().build().unwrap();
46        let gateway_client = GatewayClient::create();
47        let client = gateway_client.build().unwrap();
48        assert!(endpoint.query(&client).await.is_ok());
49    }
50
51    #[xmtp_common::test]
52    async fn test_get_nodes_unimplemented() {
53        // xmtpd doesn't implement the GetNodes endpoint
54        let mut endpoint = GetNodes::builder().build().unwrap();
55        let xmtpd_client = XmtpdClient::create();
56        let client = xmtpd_client.build().unwrap();
57        assert!(endpoint.query(&client).await.is_err());
58    }
59}