xmtp_api_d14n/endpoints/v3/mls/
query_commit_log.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::BatchQueryCommitLogResponse;
7use xmtp_proto::xmtp::mls::api::v1::{BatchQueryCommitLogRequest, QueryCommitLogRequest};
8
9#[derive(Debug, Builder, Default)]
10#[builder(setter(strip_option), build_fn(error = "BodyError"))]
11pub struct QueryCommitLog {
12    #[builder(setter(into))]
13    query_log_requests: Vec<QueryCommitLogRequest>,
14}
15
16impl QueryCommitLog {
17    pub fn builder() -> QueryCommitLogBuilder {
18        Default::default()
19    }
20}
21
22impl Endpoint for QueryCommitLog {
23    type Output = BatchQueryCommitLogResponse;
24    fn grpc_endpoint(&self) -> Cow<'static, str> {
25        xmtp_proto::path_and_query::<BatchQueryCommitLogRequest>()
26    }
27
28    fn body(&self) -> Result<Bytes, BodyError> {
29        Ok(BatchQueryCommitLogRequest {
30            requests: self.query_log_requests.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_common::rand_vec;
42    use xmtp_proto::prelude::*;
43
44    #[xmtp_common::test]
45    fn test_file_descriptor() {
46        let pnq = xmtp_proto::path_and_query::<BatchQueryCommitLogRequest>();
47        println!("{}", pnq);
48    }
49
50    #[xmtp_common::test]
51    fn test_grpc_endpoint_returns_correct_path() {
52        let endpoint = QueryCommitLog::default();
53        assert_eq!(
54            endpoint.grpc_endpoint(),
55            "/xmtp.mls.api.v1.MlsApi/BatchQueryCommitLog"
56        );
57    }
58
59    #[xmtp_common::test]
60    async fn test_query_commit_log() {
61        let client = NodeGoClient::create();
62        let client = client.build().unwrap();
63        let endpoint = QueryCommitLog::builder()
64            .query_log_requests(vec![QueryCommitLogRequest {
65                group_id: rand_vec::<16>(),
66                paging_info: None,
67            }])
68            .build()
69            .unwrap();
70
71        let result = xmtp_proto::api::ignore(endpoint).query(&client).await;
72        assert!(result.is_ok(), "{:?}", result);
73    }
74}