diff --git a/src/core/data_loader/dedupe.rs b/src/core/data_loader/dedupe.rs index 8a1b9a91fa..ba5dd5edfd 100644 --- a/src/core/data_loader/dedupe.rs +++ b/src/core/data_loader/dedupe.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; use std::hash::Hash; -use std::pin::Pin; use std::sync::{Arc, Mutex}; use futures_util::Future; @@ -34,11 +33,11 @@ impl Dedupe { Self { cache: Arc::new(Mutex::new(HashMap::new())), size, persist } } - pub async fn dedupe<'a>( - &'a self, - key: &'a K, - or_else: impl FnOnce() -> Pin + 'a + Send>> + Send, - ) -> V { + pub async fn dedupe<'a, Fn, Fut>(&'a self, key: &'a K, or_else: Fn) -> V + where + Fn: FnOnce() -> Fut, + Fut: Future, + { match self.step(key) { Step::Value(value) => value, Step::Recv(mut rx) => rx.recv().await.unwrap(), @@ -81,11 +80,11 @@ impl DedupeResult { } impl DedupeResult { - pub async fn dedupe<'a>( - &'a self, - key: &'a K, - or_else: impl FnOnce() -> Pin> + 'a + Send>> + Send, - ) -> Result { + pub async fn dedupe<'a, Fn, Fut>(&'a self, key: &'a K, or_else: Fn) -> Result + where + Fn: FnOnce() -> Fut, + Fut: Future>, + { self.0.dedupe(key, or_else).await } } diff --git a/src/core/ir/io.rs b/src/core/ir/io.rs index 5d809efa2a..0f8930e197 100644 --- a/src/core/ir/io.rs +++ b/src/core/ir/io.rs @@ -73,13 +73,11 @@ impl Eval for IO { Box::pin(async move { ctx.request_ctx .cache - .dedupe(&key, || { - Box::pin(async { - ctx.request_ctx - .dedupe_handler - .dedupe(&key, || Box::pin(self.eval_inner(ctx))) - .await - }) + .dedupe(&key, || async { + ctx.request_ctx + .dedupe_handler + .dedupe(&key, || self.eval_inner(ctx)) + .await }) .await })