// use tokio::time::{sleep, Duration}; // // macro_rules! call_with_retrial { // ($func:expr, $ret_type:expr, $n:expr, $interval_ms:expr) => { // { // let mut attempt = 0; // let mut last_error = None; // let p: $ret_type; // // while attempt < $n { // match $func { // Ok(result) => { // let p = result; // break; // }, // Err(e) => { // last_error = Some(e); // attempt += 1; // if attempt < $n { // tokio::time::sleep(Duration::from_millis($interval_ms)).await; // } // } // } // } // // if let Some(e) = last_error { // Err(e) // } else { // Ok(p) // } // } // }; // } // #[tokio::main] async fn main() { // async fn example_function(fail: bool) -> Result { // if rand::random::() { // Ok(42) // } else { // Err("Failed") // } // } // // let result:Result = call_with_retrial!(example_function(true).await, i32, 5, 100); // match result { // Ok(value) => println!("Success: {}", value), // Err(e) => println!("All attempts failed: {}", e), // } }