From d5b9b84db663fd09f84dfb2b862818106e7a73ab Mon Sep 17 00:00:00 2001 From: Thomas Zahner Date: Thu, 11 Apr 2024 11:33:38 +0200 Subject: [PATCH] Extract function and add SAFETY note --- lychee-lib/src/checker.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lychee-lib/src/checker.rs b/lychee-lib/src/checker.rs index 9a4d7b9..7dfad42 100644 --- a/lychee-lib/src/checker.rs +++ b/lychee-lib/src/checker.rs @@ -37,7 +37,7 @@ impl Checker { let mut retries: u64 = 0; let mut wait_time = self.retry_wait_time; - let mut status = self.check_default(request.try_clone().unwrap()).await; // TODO: try_clone + let mut status = self.check_default(clone_unwrap(&request)).await; while retries < self.max_retries { if status.is_success() || !status.should_retry() { return status; @@ -45,7 +45,7 @@ impl Checker { retries += 1; tokio::time::sleep(wait_time).await; wait_time = wait_time.saturating_mul(2); - status = self.check_default(request.try_clone().unwrap()).await; // TODO: try_clone + status = self.check_default(clone_unwrap(&request)).await; } status } @@ -59,6 +59,12 @@ impl Checker { } } +/// SAFETY: unwrapping the `try_clone` of `reqwest::Request` is safe because a request only fails to be cloned when `body` of `Request` is a stream +/// and `body` cannot be a stream as long as the `stream` feature is disabled. +fn clone_unwrap(request: &Request) -> Request { + request.try_clone().unwrap() +} + #[async_trait] impl Chainable for Checker { async fn chain(&mut self, input: Request) -> ChainResult {