fireblocks_sdk/client/
poll.rs1use {
2 super::Client,
3 crate::models::TransactionResponse,
4 std::{ops::Add, time::Duration},
5 tracing::debug,
6};
7
8impl Client {
9 #[tracing::instrument(level = "debug", skip(self, callback))]
19 pub async fn poll_transaction(
20 &self,
21 id: &str,
22 timeout: std::time::Duration,
23 interval: std::time::Duration,
24 callback: impl Fn(&TransactionResponse) + Send + Sync,
25 ) -> crate::Result<TransactionResponse> {
26 let mut total_time = Duration::from_millis(0);
27 loop {
28 if let Ok(result) = self.get_transaction(id).await {
29 debug!("status {:#?}", result.status);
30 if result.status.is_terminal() {
31 break;
32 }
33 callback(&result);
34 }
35 tokio::time::sleep(interval).await;
36 total_time = total_time.add(interval);
37 if total_time > timeout {
38 break;
39 }
40 }
41 self.get_transaction(id).await
42 }
43}