From e24cc8757da4c93f2b4de9547400d1120f9b128f Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Fri, 7 Jun 2024 20:54:26 -0700 Subject: [PATCH 1/4] allow custom error types for add_async --- crates/bevy_asset/src/server/mod.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 46e334ec66079..1be99b10df3a0 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -718,9 +718,9 @@ impl AssetServer { /// /// After the asset has been fully loaded, it will show up in the relevant [`Assets`] storage. #[must_use = "not using the returned strong handle may result in the unexpected release of the asset"] - pub fn add_async( + pub fn add_async( &self, - future: impl Future> + Send + 'static, + future: impl Future> + Send + 'static, ) -> Handle { let handle = self .data @@ -741,12 +741,15 @@ impl AssetServer { .unwrap(); } Err(error) => { + let error = AddAsyncError { + error: Arc::new(error), + }; error!("{error}"); event_sender .send(InternalAssetEvent::Failed { id, path: Default::default(), - error, + error: AssetLoadError::AddAsyncError(error), }) .unwrap(); } @@ -1403,6 +1406,8 @@ pub enum AssetLoadError { CannotLoadIgnoredAsset { path: AssetPath<'static> }, #[error(transparent)] AssetLoaderError(#[from] AssetLoaderError), + #[error(transparent)] + AddAsyncError(#[from] AddAsyncError), #[error("The file at '{}' does not contain the labeled asset '{}'; it contains the following {} assets: {}", base_path, label, @@ -1441,6 +1446,22 @@ impl AssetLoaderError { } } +#[derive(Error, Debug, Clone)] +#[error("An error ocurred while resolving an asset added by `add_async`")] +pub struct AddAsyncError { + error: Arc, +} + +impl PartialEq for AddAsyncError { + /// Equality comparison for `AssetLoaderError::error` is not full (only through `TypeId`) + #[inline] + fn eq(&self, other: &Self) -> bool { + self.error.type_id() == other.error.type_id() + } +} + +impl Eq for AddAsyncError {} + /// An error that occurs when an [`AssetLoader`] is not registered for a given extension. #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("no `AssetLoader` found{}", format_missing_asset_ext(.extensions))] From c06ce276af702e0bc9bb6f0c53ce8abf44bda2f6 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Fri, 7 Jun 2024 21:02:27 -0700 Subject: [PATCH 2/4] fix typo --- crates/bevy_asset/src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 1be99b10df3a0..4821283c1dd93 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1447,7 +1447,7 @@ impl AssetLoaderError { } #[derive(Error, Debug, Clone)] -#[error("An error ocurred while resolving an asset added by `add_async`")] +#[error("An error occurred while resolving an asset added by `add_async`")] pub struct AddAsyncError { error: Arc, } From 521b6afba9ff2fc0f448386570dace8c2a1cc8a2 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Fri, 7 Jun 2024 21:43:51 -0700 Subject: [PATCH 3/4] update comment --- crates/bevy_asset/src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 4821283c1dd93..19b3967600b7f 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1453,7 +1453,7 @@ pub struct AddAsyncError { } impl PartialEq for AddAsyncError { - /// Equality comparison for `AssetLoaderError::error` is not full (only through `TypeId`) + /// Equality comparison is not full (only through `TypeId`) #[inline] fn eq(&self, other: &Self) -> bool { self.error.type_id() == other.error.type_id() From 23b9abd235b789771769c98aab094f846e703bdb Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sat, 8 Jun 2024 19:20:41 -0700 Subject: [PATCH 4/4] format inner error --- crates/bevy_asset/src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 19b3967600b7f..a75fb9a4a4beb 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1447,7 +1447,7 @@ impl AssetLoaderError { } #[derive(Error, Debug, Clone)] -#[error("An error occurred while resolving an asset added by `add_async`")] +#[error("An error occurred while resolving an asset added by `add_async`: {error}")] pub struct AddAsyncError { error: Arc, }