Impl `IntoFuture` for `ContractCall` (#1826)
This commit is contained in:
parent
14e038860b
commit
cfc301d6b1
|
@ -14,7 +14,14 @@ use ethers_providers::{
|
||||||
Middleware, PendingTransaction, ProviderError,
|
Middleware, PendingTransaction, ProviderError,
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::{borrow::Cow, fmt::Debug, future::Future, marker::PhantomData, sync::Arc};
|
use std::{
|
||||||
|
borrow::Cow,
|
||||||
|
fmt::Debug,
|
||||||
|
future::{Future, IntoFuture},
|
||||||
|
marker::PhantomData,
|
||||||
|
pin::Pin,
|
||||||
|
sync::Arc,
|
||||||
|
};
|
||||||
|
|
||||||
use thiserror::Error as ThisError;
|
use thiserror::Error as ThisError;
|
||||||
|
|
||||||
|
@ -211,3 +218,19 @@ where
|
||||||
.map_err(ContractError::MiddlewareError)
|
.map_err(ContractError::MiddlewareError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [`ContractCall`] can be turned into [`Future`] automatically with `.await`.
|
||||||
|
/// Defaults to calling [`ContractCall::call`].
|
||||||
|
impl<M, D> IntoFuture for ContractCall<M, D>
|
||||||
|
where
|
||||||
|
Self: 'static,
|
||||||
|
M: Middleware,
|
||||||
|
D: Detokenize,
|
||||||
|
{
|
||||||
|
type Output = Result<D, ContractError<M>>;
|
||||||
|
type IntoFuture = Pin<Box<dyn Future<Output = Self::Output>>>;
|
||||||
|
|
||||||
|
fn into_future(self) -> Self::IntoFuture {
|
||||||
|
Box::pin(async move { self.call().await })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue