xmtp_api_d14n/endpoints/v3/mls/
fetch_key_packages.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::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}