xmtp_api_d14n/endpoints/v3/identity/
publish_identity_update.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::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}