diff --git a/Cargo.toml b/Cargo.toml index 140512e..dce4d9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ bevy = {version = "0.12", default-features = false, features = ["bevy_asset"]} pin-project = "1.1.3" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -isahc = "1" +surf = {version = "2.3", default-features = false, features = ["h1-client-rustls"]} [target.'cfg(target_arch = "wasm32")'.dependencies] web-sys = {version = "0.3.22", default-features = false} diff --git a/src/web_asset_source.rs b/src/web_asset_source.rs index 356453d..19c56b4 100644 --- a/src/web_asset_source.rs +++ b/src/web_asset_source.rs @@ -88,8 +88,8 @@ 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 bevy::asset::io::VecReader; + use surf::StatusCode; #[pin_project::pin_project] struct ContinuousPoll(#[pin] T); @@ -105,16 +105,38 @@ async fn get<'a>(path: PathBuf) -> Result>, AssetReaderError> { } } - let response = ContinuousPoll(get_async(path.to_str().unwrap())) - .await - .unwrap(); + let str_path = path.to_str().ok_or_else(|| { + AssetReaderError::Io(io::Error::new( + io::ErrorKind::Other, + format!("non-utf8 path: {}", path.display()), + )) + })?; + let mut response = ContinuousPoll(surf::get(str_path)).await.map_err(|err| { + AssetReaderError::Io(io::Error::new( + io::ErrorKind::Other, + format!( + "unexpected status code {} while loading {}: {}", + err.status(), + path.display(), + err.into_inner(), + ), + )) + })?; match response.status() { - StatusCode::OK => Ok(Box::new(response.into_body()) as _), - StatusCode::NOT_FOUND => Err(AssetReaderError::NotFound(path)), + StatusCode::Ok => Ok(Box::new(VecReader::new( + ContinuousPoll(response.body_bytes()) + .await + .map_err(|_| AssetReaderError::NotFound(path.to_path_buf()))?, + )) as _), + StatusCode::NotFound => Err(AssetReaderError::NotFound(path)), code => Err(AssetReaderError::Io(io::Error::new( io::ErrorKind::Other, - format!("unexpected status code {code}"), + format!( + "unexpected status code {} while loading {}", + code, + path.display() + ), ))), } }