Skip to content
This repository has been archived by the owner on Oct 19, 2024. It is now read-only.

feat(providers): Log methods for PendingTransaction #884

Merged
merged 3 commits into from
Feb 8, 2022
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions ethers-providers/src/pending_transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,32 @@ use wasm_timer::Delay;
/// once the transaction has enough `confirmations`. The default number of confirmations
/// is 1, but may be adjusted with the `confirmations` method. If the transaction does not
/// have enough confirmations or is not mined, the future will stay in the pending state.
///```
/// use ethers_providers::{Provider, Http, Middleware};
/// use ethers_core::types::TransactionRequest;
/// use ethers_core::utils::Ganache;
/// use std::convert::TryFrom;
///
/// # #[tokio::main(flavor = "current_thread")]
/// # async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// # let ganache = Ganache::new().spawn();
/// # let client = Provider::<Http>::try_from(ganache.endpoint()).unwrap();
/// # let accounts = client.get_accounts().await?;
/// # let from = accounts[0];
/// # let to = accounts[1];
/// # let balance_before = client.get_balance(to, None).await?;
/// let tx = TransactionRequest::new().to(to).value(1000).from(from);
/// let receipt = client
/// .send_transaction(tx, None)
/// .await? // PendingTransaction<_>
/// .log_msg("Pending transfer hash") // print pending tx hash with message
/// .await?; // Result<Option<TransactionReceipt>, _>
/// # let _ = receipt;
/// # let balance_after = client.get_balance(to, None).await?;
/// # assert_eq!(balance_after, balance_before + 1000);
/// # Ok(())
/// # }
/// ```
#[pin_project]
pub struct PendingTransaction<'a, P> {
tx_hash: TxHash,
Expand Down Expand Up @@ -78,6 +104,22 @@ impl<'a, P: JsonRpcClient> PendingTransaction<'a, P> {
}
}

impl<'a, P> PendingTransaction<'a, P> {
pub fn inspect<F>(self, mut f: F) -> Self
where
F: FnMut(&Self),
{
f(&self);
self
}
pub fn log_msg<S: std::fmt::Display>(self, msg: S) -> Self {
self.inspect(|s| println!("{}: {:?}", msg, *s))
}
pub fn log(self) -> Self {
self.inspect(|s| println!("Pending hash: {:?}", *s))
}
}

macro_rules! rewake_with_new_state {
($ctx:ident, $this:ident, $new_state:expr) => {
*$this.state = $new_state;
Expand Down