3 use std::future::Future;
6 #[derive(Clone, Debug, Error)]
7 #[error("Error sending request, {0}")]
8 struct SendError(pub String);
10 #[derive(Clone, Debug, Error)]
11 #[error("Error receiving response, {0}")]
12 pub struct RecvError(pub String);
14 pub async fn retry<F, Fut, T>(f: F) -> Result<T, LemmyError>
17 Fut: Future<Output = Result<T, reqwest::Error>>,
19 retry_custom(|| async { Ok((f)().await) }).await
22 async fn retry_custom<F, Fut, T>(f: F) -> Result<T, LemmyError>
25 Fut: Future<Output = Result<Result<T, reqwest::Error>, LemmyError>>,
27 let mut response = Err(anyhow!("connect timeout").into());
31 Ok(t) => return Ok(t),
34 response = Err(SendError(e.to_string()).into());
37 return Err(SendError(e.to_string()).into());