xmtp_api_d14n/endpoints/v3/mls/
fetch_key_packages.rs1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6use xmtp_proto::mls_v1::FetchKeyPackagesResponse;
7use xmtp_proto::xmtp::mls::api::v1::FetchKeyPackagesRequest;
8
9#[derive(Debug, Builder, Default)]
10#[builder(setter(strip_option), build_fn(error = "BodyError"))]
11pub struct FetchKeyPackages {
12 #[builder(setter(into, each = "installation_key"))]
13 installation_keys: Vec<Vec<u8>>,
14}
15
16impl FetchKeyPackages {
17 pub fn builder() -> FetchKeyPackagesBuilder {
18 Default::default()
19 }
20}
21
22impl Endpoint for FetchKeyPackages {
23 type Output = FetchKeyPackagesResponse;
24 fn grpc_endpoint(&self) -> Cow<'static, str> {
25 xmtp_proto::path_and_query::<FetchKeyPackagesRequest>()
26 }
27
28 fn body(&self) -> Result<Bytes, BodyError> {
29 Ok(FetchKeyPackagesRequest {
30 installation_keys: self.installation_keys.clone(),
31 }
32 .encode_to_vec()
33 .into())
34 }
35}
36
37#[cfg(test)]
38mod test {
39 use super::*;
40 use xmtp_api_grpc::test::NodeGoClient;
41 use xmtp_proto::{mls_v1::FetchKeyPackagesResponse, prelude::*};
42
43 #[xmtp_common::test]
44 fn test_file_descriptor() {
45 use xmtp_proto::xmtp::mls::api::v1::FetchKeyPackagesRequest;
46 let pnq = xmtp_proto::path_and_query::<FetchKeyPackagesRequest>();
47 println!("{}", pnq);
48 }
49
50 #[xmtp_common::test]
51 fn test_grpc_endpoint_returns_correct_path() {
52 let endpoint = FetchKeyPackages::default();
53 assert_eq!(
54 endpoint.grpc_endpoint(),
55 "/xmtp.mls.api.v1.MlsApi/FetchKeyPackages"
56 );
57 }
58
59 #[xmtp_common::test]
60 async fn test_fetch_key_packages() {
61 let client = NodeGoClient::create();
62 let client = client.build().unwrap();
63 let mut endpoint = FetchKeyPackages::builder()
64 .installation_keys(vec![vec![1, 2, 3]])
65 .build()
66 .unwrap();
67
68 let result: FetchKeyPackagesResponse = endpoint.query(&client).await.unwrap();
69 assert_eq!(
70 result,
71 FetchKeyPackagesResponse {
72 key_packages: vec![Default::default()]
73 }
74 );
75 }
76}