xmtp_api_d14n/endpoints/v3/identity/
publish_identity_update.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::PublishIdentityUpdateResponse;
7use xmtp_proto::xmtp::identity::api::v1::PublishIdentityUpdateRequest;
8use xmtp_proto::xmtp::identity::associations::IdentityUpdate;
9
10#[derive(Debug, Builder, Default)]
11#[builder(build_fn(error = "BodyError"))]
12pub struct PublishIdentityUpdate {
13 #[builder(default)]
14 pub identity_update: Option<IdentityUpdate>,
15}
16
17impl PublishIdentityUpdate {
18 pub fn builder() -> PublishIdentityUpdateBuilder {
19 Default::default()
20 }
21}
22
23impl Endpoint for PublishIdentityUpdate {
24 type Output = PublishIdentityUpdateResponse;
25 fn grpc_endpoint(&self) -> Cow<'static, str> {
26 xmtp_proto::path_and_query::<PublishIdentityUpdateRequest>()
27 }
28
29 fn body(&self) -> Result<Bytes, BodyError> {
30 Ok(PublishIdentityUpdateRequest {
31 identity_update: self.identity_update.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::PublishIdentityUpdateResponse, prelude::*};
43
44 #[xmtp_common::test]
45 fn test_file_descriptor() {
46 use xmtp_proto::xmtp::identity::api::v1::PublishIdentityUpdateRequest;
47 let _pnq = xmtp_proto::path_and_query::<PublishIdentityUpdateRequest>();
48 }
49
50 #[xmtp_common::test]
51 fn test_grpc_endpoint_returns_correct_path() {
52 let endpoint = PublishIdentityUpdate::default();
53 assert_eq!(
54 endpoint.grpc_endpoint(),
55 "/xmtp.identity.api.v1.IdentityApi/PublishIdentityUpdate"
56 );
57 }
58
59 #[xmtp_common::test]
60 async fn test_publish_identity_update() {
61 use xmtp_common::time::now_ns;
62 use xmtp_proto::xmtp::identity::associations::IdentityUpdate;
63
64 let client = NodeGoClient::create();
65 let client = client.build().unwrap();
66 let mut endpoint = PublishIdentityUpdate::builder()
67 .identity_update(Some(IdentityUpdate {
68 actions: vec![],
69 inbox_id: "".to_string(),
70 client_timestamp_ns: now_ns() as u64,
71 }))
72 .build()
73 .unwrap();
74
75 let _: Result<PublishIdentityUpdateResponse, _> = endpoint.query(&client).await;
76 }
77}