use std::{future::Future, time::Duration};
use lightwallet_protocol::{
Address, AddressList, Balance, GetAddressUtxosArg, GetAddressUtxosReply,
GetAddressUtxosReplyList, RawTransaction, TransparentAddressBlockFilter,
};
use tonic::Request;
use super::{GrpcIndexer, Indexer};
pub trait TransparentIndexer: Indexer {
#[deprecated(note = "use get_taddress_transactions instead")]
fn get_taddress_txids(
&mut self,
filter: TransparentAddressBlockFilter,
timeout: Duration,
) -> impl Future<Output = Result<tonic::Streaming<RawTransaction>, tonic::Status>> + Send;
fn get_taddress_transactions(
&mut self,
filter: TransparentAddressBlockFilter,
timeout: Duration,
) -> impl Future<Output = Result<tonic::Streaming<RawTransaction>, tonic::Status>> + Send;
fn get_taddress_balance(
&mut self,
addresses: AddressList,
timeout: Duration,
) -> impl Future<Output = Result<Balance, tonic::Status>> + Send;
fn get_taddress_balance_stream(
&mut self,
addresses: Vec<Address>,
) -> impl Future<Output = Result<Balance, tonic::Status>> + Send;
fn get_address_utxos(
&mut self,
arg: GetAddressUtxosArg,
timeout: Duration,
) -> impl Future<Output = Result<GetAddressUtxosReplyList, tonic::Status>> + Send;
fn get_address_utxos_stream(
&mut self,
arg: GetAddressUtxosArg,
timeout: Duration,
) -> impl Future<Output = Result<tonic::Streaming<GetAddressUtxosReply>, tonic::Status>> + Send;
}
impl TransparentIndexer for GrpcIndexer {
#[allow(deprecated)]
async fn get_taddress_txids(
&mut self,
filter: TransparentAddressBlockFilter,
timeout: Duration,
) -> Result<tonic::Streaming<RawTransaction>, tonic::Status> {
let mut request = Request::new(filter);
request.set_timeout(timeout);
Ok(self
.clear_net_client
.get_taddress_txids(request)
.await?
.into_inner())
}
async fn get_taddress_transactions(
&mut self,
filter: TransparentAddressBlockFilter,
timeout: Duration,
) -> Result<tonic::Streaming<RawTransaction>, tonic::Status> {
let mut request = Request::new(filter);
request.set_timeout(timeout);
Ok(self
.clear_net_client
.get_taddress_transactions(request)
.await?
.into_inner())
}
async fn get_taddress_balance(
&mut self,
addresses: AddressList,
timeout: Duration,
) -> Result<Balance, tonic::Status> {
let mut request = Request::new(addresses);
request.set_timeout(timeout);
Ok(self
.clear_net_client
.get_taddress_balance(request)
.await?
.into_inner())
}
async fn get_taddress_balance_stream(
&mut self,
addresses: Vec<Address>,
) -> Result<Balance, tonic::Status> {
let stream = tokio_stream::iter(addresses);
Ok(self
.clear_net_client
.get_taddress_balance_stream(stream)
.await?
.into_inner())
}
async fn get_address_utxos(
&mut self,
arg: GetAddressUtxosArg,
timeout: Duration,
) -> Result<GetAddressUtxosReplyList, tonic::Status> {
let mut request = Request::new(arg);
request.set_timeout(timeout);
Ok(self
.clear_net_client
.get_address_utxos(request)
.await?
.into_inner())
}
async fn get_address_utxos_stream(
&mut self,
arg: GetAddressUtxosArg,
timeout: Duration,
) -> Result<tonic::Streaming<GetAddressUtxosReply>, tonic::Status> {
let mut request = Request::new(arg);
request.set_timeout(timeout);
Ok(self
.clear_net_client
.get_address_utxos_stream(request)
.await?
.into_inner())
}
}