From e322ce190c89fdc3754dd80a5dd9d88fb9a6d2c7 Mon Sep 17 00:00:00 2001 From: Oliver Scherer Date: Wed, 29 Nov 2023 11:23:20 +0100 Subject: [PATCH] Use pin_project and make ContinuousPoll generic --- Cargo.toml | 1 + src/web_asset_source.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4ddaec0..140512e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ version = "0.7.1" [dependencies] bevy = {version = "0.12", default-features = false, features = ["bevy_asset"]} +pin-project = "1.1.3" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] isahc = "1" diff --git a/src/web_asset_source.rs b/src/web_asset_source.rs index ed7edf2..356453d 100644 --- a/src/web_asset_source.rs +++ b/src/web_asset_source.rs @@ -88,19 +88,20 @@ async fn get<'a>(path: PathBuf) -> Result>, AssetReaderError> { use std::pin::Pin; use std::task::{Context, Poll}; + use isahc::get_async; use isahc::http::StatusCode; - use isahc::{get_async, AsyncBody, Error, Response, ResponseFuture}; - struct ContinuousPoll<'a>(ResponseFuture<'a>); + #[pin_project::pin_project] + struct ContinuousPoll(#[pin] T); - impl<'a> Future for ContinuousPoll<'a> { - type Output = Result, Error>; + impl Future for ContinuousPoll { + type Output = T::Output; - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { // Always wake - blocks on single threaded executor. cx.waker().wake_by_ref(); - Pin::new(&mut self.0).poll(cx) + self.project().0.poll(cx) } }