1pub use eq_common::eqs::inclusion_client::InclusionClient;
3pub use eq_common::eqs::{
4 get_keccak_inclusion_response, GetKeccakInclusionRequest, GetKeccakInclusionResponse,
5};
6pub use eq_common::{KeccakInclusionToDataRootProofInput, KeccakInclusionToDataRootProofOutput};
7
8use tonic::transport::Channel;
9use tonic::Status as TonicStatus;
10
11pub mod types;
12pub use types::BlobId;
13
14#[derive(Debug)]
15pub struct EqClient {
16 grpc_channel: Channel,
17}
18
19impl EqClient {
20 pub fn new(grpc_channel: Channel) -> Self {
21 Self { grpc_channel }
22 }
23 pub fn get_keccak_inclusion<'a>(
24 &'a self,
25 request: &'a BlobId,
26 ) -> impl std::future::Future<Output = Result<GetKeccakInclusionResponse, TonicStatus>> + Send + 'a
27 where
28 Self: Sync,
29 {
30 async {
31 let request = GetKeccakInclusionRequest {
32 commitment: request.commitment.hash().to_vec(),
33 namespace: request
34 .namespace
35 .id_v0()
36 .ok_or(TonicStatus::invalid_argument("Namespace invalid"))?
37 .to_vec(),
38 height: request.height.into(),
39 };
40 let mut client = InclusionClient::new(self.grpc_channel.clone());
41 match client.get_keccak_inclusion(request).await {
42 Ok(response) => Ok(response.into_inner()),
43 Err(e) => Err(e),
44 }
45 }
46 }
47}