mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-10-01 01:36:12 -04:00
5c6258390c
* Adding a way to GetComments for a community given its name only. * Adding getcomments to api docs. * A first pass at locally working isomorphic integration. * Testing out cargo-husky. * Testing a fail hook. * Revert "Testing a fail hook." This reverts commit0941cf1736
. * Moving server to top level, now that UI is gone. * Running cargo fmt using old way. * Adding nginx, fixing up docker-compose files, fixing docs. * Trying to re-add API tests. * Fixing prod dockerfile. * Redoing nightly fmt * Trying to fix private message api test. * Adding CommunityJoin, PostJoin instead of joins from GetComments, etc. - Fixes #1122 * Fixing fmt. * Fixing up docs. * Removing translations. * Adding apps / clients to readme. * Fixing main image. * Using new lemmy-isomorphic-ui with better javascript disabled. * Try to fix image uploads in federation test * Revert "Try to fix image uploads in federation test" This reverts commita2ddf2a90b
. * Fix post url federation * Adding some more tests, some still broken. * Don't need gitattributes anymore. * Update local federation test setup * Fixing tests. * Fixing travis build. * Fixing travis build, again. * Changing lemmy-isomorphic-ui to lemmy-ui * Error in travis build again. Co-authored-by: Felix Ableitner <me@nutomic.com>
44 lines
1015 B
Rust
44 lines
1015 B
Rust
use anyhow::anyhow;
|
|
use lemmy_utils::LemmyError;
|
|
use std::future::Future;
|
|
use thiserror::Error;
|
|
|
|
#[derive(Clone, Debug, Error)]
|
|
#[error("Error sending request, {0}")]
|
|
struct SendError(pub String);
|
|
|
|
#[derive(Clone, Debug, Error)]
|
|
#[error("Error receiving response, {0}")]
|
|
pub struct RecvError(pub String);
|
|
|
|
pub async fn retry<F, Fut, T>(f: F) -> Result<T, LemmyError>
|
|
where
|
|
F: Fn() -> Fut,
|
|
Fut: Future<Output = Result<T, reqwest::Error>>,
|
|
{
|
|
retry_custom(|| async { Ok((f)().await) }).await
|
|
}
|
|
|
|
async fn retry_custom<F, Fut, T>(f: F) -> Result<T, LemmyError>
|
|
where
|
|
F: Fn() -> Fut,
|
|
Fut: Future<Output = Result<Result<T, reqwest::Error>, LemmyError>>,
|
|
{
|
|
let mut response = Err(anyhow!("connect timeout").into());
|
|
|
|
for _ in 0u8..3 {
|
|
match (f)().await? {
|
|
Ok(t) => return Ok(t),
|
|
Err(e) => {
|
|
if e.is_timeout() {
|
|
response = Err(SendError(e.to_string()).into());
|
|
continue;
|
|
}
|
|
return Err(SendError(e.to_string()).into());
|
|
}
|
|
}
|
|
}
|
|
|
|
response
|
|
}
|