xmtp_api_d14n/endpoints/v3/identity/
get_identity_updates_v2.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::identity_v1::GetIdentityUpdatesResponse;
7use xmtp_proto::xmtp::identity::api::v1::GetIdentityUpdatesRequest;
8use xmtp_proto::xmtp::identity::api::v1::get_identity_updates_request::Request;
9
10#[derive(Debug, Builder, Default)]
11#[builder(setter(strip_option), build_fn(error = "BodyError"))]
12pub struct GetIdentityUpdatesV2 {
13    #[builder(setter(into, each = "request"))]
14    pub requests: Vec<Request>,
15}
16
17impl GetIdentityUpdatesV2 {
18    pub fn builder() -> GetIdentityUpdatesV2Builder {
19        Default::default()
20    }
21}
22
23impl Endpoint for GetIdentityUpdatesV2 {
24    type Output = GetIdentityUpdatesResponse;
25    fn grpc_endpoint(&self) -> Cow<'static, str> {
26        xmtp_proto::path_and_query::<GetIdentityUpdatesRequest>()
27    }
28
29    fn body(&self) -> Result<Bytes, BodyError> {
30        Ok(GetIdentityUpdatesRequest {
31            requests: self.requests.clone(),
32        }
33        .encode_to_vec()
34        .into())
35    }
36}
37
38#[cfg(test)]
39mod test {
40    use super::*;
41    use xmtp_api_grpc::test::NodeGoClient;
42    use xmtp_proto::{identity_v1::GetIdentityUpdatesResponse, prelude::*};
43
44    #[xmtp_common::test]
45    fn test_file_descriptor() {
46        let pnq = xmtp_proto::path_and_query::<GetIdentityUpdatesRequest>();
47        println!("{}", pnq);
48    }
49
50    #[xmtp_common::test]
51    fn test_grpc_endpoint_returns_correct_path() {
52        let endpoint = GetIdentityUpdatesV2::default();
53        assert_eq!(
54            endpoint.grpc_endpoint(),
55            "/xmtp.identity.api.v1.IdentityApi/GetIdentityUpdates"
56        );
57    }
58
59    #[xmtp_common::test]
60    async fn test_get_identity_updates_v2() {
61        let client = NodeGoClient::create();
62        let client = client.build().unwrap();
63        let mut endpoint = GetIdentityUpdatesV2::builder()
64            .requests(vec![Request {
65                inbox_id: "".to_string(),
66                sequence_id: 0,
67            }])
68            .build()
69            .unwrap();
70
71        let result: GetIdentityUpdatesResponse = endpoint.query(&client).await.unwrap();
72        assert_eq!(result.responses.len(), 1);
73    }
74}