fix: use native async recursion
Some checks failed
Security audit / security_audit (push) Waiting to run
Conventional Commits / Conventional Commits (push) Waiting to run
/ Flake Checker (push) Waiting to run
/ Check Nix Flake (push) Waiting to run
/ Build Nix package (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, beta) (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, nightly) (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, stable) (push) Waiting to run
Unit tests / unit-tests (windows-latest, 1.70.0) (push) Waiting to run
Unit tests / unit-tests (windows-latest, beta) (push) Waiting to run
Unit tests / unit-tests (windows-latest, nightly) (push) Waiting to run
Unit tests / unit-tests (windows-latest, stable) (push) Waiting to run
Unit tests (BSD) / unit-tests-freebsd (push) Has been cancelled
Unit tests (BSD) / unit-tests-netbsd (push) Has been cancelled
Unit tests (BSD) / unit-tests-openbsd (push) Has been cancelled
Unit tests / unit-tests (macos-latest, 1.70.0) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, beta) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, nightly) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, stable) (push) Has been cancelled
Unit tests / unit-tests (ubuntu-latest, 1.70.0) (push) Has been cancelled
Some checks failed
Security audit / security_audit (push) Waiting to run
Conventional Commits / Conventional Commits (push) Waiting to run
/ Flake Checker (push) Waiting to run
/ Check Nix Flake (push) Waiting to run
/ Build Nix package (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, beta) (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, nightly) (push) Waiting to run
Unit tests / unit-tests (ubuntu-latest, stable) (push) Waiting to run
Unit tests / unit-tests (windows-latest, 1.70.0) (push) Waiting to run
Unit tests / unit-tests (windows-latest, beta) (push) Waiting to run
Unit tests / unit-tests (windows-latest, nightly) (push) Waiting to run
Unit tests / unit-tests (windows-latest, stable) (push) Waiting to run
Unit tests (BSD) / unit-tests-freebsd (push) Has been cancelled
Unit tests (BSD) / unit-tests-netbsd (push) Has been cancelled
Unit tests (BSD) / unit-tests-openbsd (push) Has been cancelled
Unit tests / unit-tests (macos-latest, 1.70.0) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, beta) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, nightly) (push) Has been cancelled
Unit tests / unit-tests (macos-latest, stable) (push) Has been cancelled
Unit tests / unit-tests (ubuntu-latest, 1.70.0) (push) Has been cancelled
Rust 1.77.0 added async recursion, we use that instead of the crate. This requires a slight rewrite to heap pin the return value of the closure so the function state doesn't grow. Fix: #9 Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
parent
3f632969a9
commit
473986588d
3 changed files with 7 additions and 16 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -100,17 +100,6 @@ version = "1.0.86"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
|
||||
[[package]]
|
||||
name = "async-recursion"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.77",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-stream"
|
||||
version = "0.3.5"
|
||||
|
@ -1122,7 +1111,6 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
|
|||
name = "nix-weather"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"async-recursion",
|
||||
"clap",
|
||||
"clap_complete",
|
||||
"clap_mangen",
|
||||
|
|
|
@ -16,7 +16,6 @@ publish = false
|
|||
build = "build.rs"
|
||||
|
||||
[dependencies]
|
||||
async-recursion = "1.0.5"
|
||||
clap = { version = "4.5.1", features = ["cargo"] }
|
||||
console-subscriber = "0.2.0"
|
||||
dns-lookup = "2.0.4"
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
use std::time::Duration;
|
||||
|
||||
use async_recursion::async_recursion;
|
||||
use reqwest::Client;
|
||||
use tokio::time::sleep;
|
||||
|
||||
|
@ -13,7 +12,6 @@ use log;
|
|||
|
||||
const MAX_SLIDE: u64 = 1000;
|
||||
|
||||
#[async_recursion]
|
||||
pub async fn nar_exists(client: Client, domain: &str, hash: &str, slide: u64) -> usize {
|
||||
let response = client
|
||||
.head(format!("https://{domain}/{hash}.narinfo"))
|
||||
|
@ -30,7 +28,13 @@ pub async fn nar_exists(client: Client, domain: &str, hash: &str, slide: u64) ->
|
|||
// so we do this instead.
|
||||
log::trace!("rate limited! {slide}");
|
||||
sleep(Duration::from_millis(slide)).await;
|
||||
nar_exists(client, domain, hash, std::cmp::min(slide * 2, MAX_SLIDE)).await
|
||||
Box::pin(nar_exists(
|
||||
client,
|
||||
domain,
|
||||
hash,
|
||||
std::cmp::min(slide * 2, MAX_SLIDE),
|
||||
))
|
||||
.await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue