xmtp_api_d14n/endpoints/v3/identity/
get_inbox_ids.rs1use 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::GetInboxIdsResponse;
7use xmtp_proto::xmtp::identity::api::v1::{GetInboxIdsRequest, get_inbox_ids_request};
8use xmtp_proto::xmtp::identity::associations::IdentifierKind;
9
10#[derive(Debug, Builder, Default)]
11#[builder(setter(strip_option), build_fn(error = "BodyError"))]
12pub struct GetInboxIds {
13 #[builder(setter(into), default)]
14 addresses: Vec<String>,
15 #[builder(setter(into), default)]
16 passkeys: Vec<String>,
17}
18
19impl GetInboxIds {
20 pub fn builder() -> GetInboxIdsBuilder {
21 Default::default()
22 }
23}
24
25impl Endpoint for GetInboxIds {
26 type Output = GetInboxIdsResponse;
27 fn grpc_endpoint(&self) -> Cow<'static, str> {
28 xmtp_proto::path_and_query::<GetInboxIdsRequest>()
29 }
30
31 fn body(&self) -> Result<Bytes, BodyError> {
32 let addresses = self
33 .addresses
34 .iter()
35 .cloned()
36 .map(|a| (a, IdentifierKind::Ethereum));
37 let passkeys = self
38 .passkeys
39 .iter()
40 .cloned()
41 .map(|p| (p, IdentifierKind::Passkey));
42
43 Ok(GetInboxIdsRequest {
44 requests: addresses
45 .chain(passkeys)
46 .map(|(i, kind)| get_inbox_ids_request::Request {
47 identifier: i,
48 identifier_kind: kind as i32,
49 })
50 .collect(),
51 }
52 .encode_to_vec()
53 .into())
54 }
55}
56
57#[cfg(test)]
58mod test {
59 use super::*;
60 use xmtp_api_grpc::test::NodeGoClient;
61 use xmtp_proto::{identity_v1::GetInboxIdsResponse, prelude::*};
62
63 #[xmtp_common::test]
64 fn test_file_descriptor() {
65 use xmtp_proto::xmtp::identity::api::v1::GetInboxIdsRequest;
66
67 let pnq = xmtp_proto::path_and_query::<GetInboxIdsRequest>();
68 println!("{}", pnq);
69 }
70
71 #[xmtp_common::test]
72 fn test_grpc_endpoint_returns_correct_path() {
73 let endpoint = GetInboxIds::default();
74 assert_eq!(
75 endpoint.grpc_endpoint(),
76 "/xmtp.identity.api.v1.IdentityApi/GetInboxIds"
77 );
78 }
79
80 #[xmtp_common::test]
81 async fn test_get_inbox_ids() {
82 let client = NodeGoClient::create();
83 let client = client.build().unwrap();
84 let mut endpoint = GetInboxIds::builder()
85 .addresses(vec![
86 "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string(),
87 ])
88 .build()
89 .unwrap();
90
91 let result: GetInboxIdsResponse = endpoint.query(&client).await.unwrap();
92 assert_eq!(result.responses.len(), 1);
93 }
94}