
# Objective - `LoadContext::labeled_asset_scope` cannot return errors back to the asset loader. This means users that need errors need to fall back to using the raw `begin_labeled_asset` and `add_loaded_labeled_asset`, which is more error-prone. ## Solution - Allow returning a (generic) error from `labeled_asset_scope`. - This has the unfortunate side effect that closures which don't return any errors need to A) return Ok at the end, B) need to specify an error type (e.g., `()`). --- ## Showcase ```rust // impl AssetLoader for MyLoader let handle = load_context.labeled_asset_scope("MySubasset", |mut load_context| { if !some_precondition { return Err(ThingsDontMakeSenseError); } let handle = load_context.add_labeled_asset("MySubasset/Other", SomeOtherThing(456)); Ok(Something{ id: 123, handle }) })?; ```
788 B
788 B
title:
labeled_asset_scope
can now return errors.
pull_requests: [19449]
labeled_asset_scope
now returns a user-specified error type based on their closure. Previously,
users would need to fall back to begin_labeled_asset
and add_loaded_labeled_asset
to handle
errors, which is more error-prone. Consider migrating to use labeled_asset_scope
if this was you!
However, labeled_asset_scope
closures that don't return errors now needs to A) return Ok, and B)
specify an error type.
If your code previously looked like this:
labeled_asset_scope(label, |mut load_context| {
let my_asset = ...;
my_asset
});
You can migrate it to:
labeled_asset_scope::<_, ()>(label, |mut load_context| {
let my_asset = ...;
Ok(my_asset)
}).unwrap();