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