@@ -387,23 +387,29 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
387387 self ,
388388 path : & AssetPath < ' static > ,
389389 asset_type_id : Option < TypeId > ,
390- ) -> Result < ( Arc < dyn ErasedAssetLoader > , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
390+ ) -> Result <
391+ (
392+ UntypedHandle ,
393+ Arc < dyn ErasedAssetLoader > ,
394+ NestedErasedAssetRef < ' builder > ,
395+ ) ,
396+ LoadDirectError ,
397+ > {
391398 if path. label ( ) . is_some ( ) {
392399 return Err ( LoadDirectError :: RequestedSubasset ( path. clone ( ) ) ) ;
393400 }
401+ let asset_server = self . load_context . asset_server . clone ( ) ;
394402 let ( mut meta, loader, mut reader) = if let Some ( reader) = self . mode . reader {
395403 let loader = if let Some ( asset_type_id) = asset_type_id {
396- self . load_context
397- . asset_server
404+ asset_server
398405 . get_asset_loader_with_asset_type_id ( asset_type_id)
399406 . await
400407 . map_err ( |error| LoadDirectError :: LoadError {
401408 dependency : path. clone ( ) ,
402409 error : error. into ( ) ,
403410 } ) ?
404411 } else {
405- self . load_context
406- . asset_server
412+ asset_server
407413 . get_path_asset_loader ( path)
408414 . await
409415 . map_err ( |error| LoadDirectError :: LoadError {
@@ -414,9 +420,7 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
414420 let meta = loader. default_meta ( ) ;
415421 ( meta, loader, ReaderRef :: Borrowed ( reader) )
416422 } else {
417- let ( meta, loader, reader) = self
418- . load_context
419- . asset_server
423+ let ( meta, loader, reader) = asset_server
420424 . get_meta_loader_and_reader ( path, asset_type_id)
421425 . await
422426 . map_err ( |error| LoadDirectError :: LoadError {
@@ -434,7 +438,13 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
434438 . load_context
435439 . load_direct_internal ( path. clone ( ) , meta. as_ref ( ) , & * loader, reader. as_mut ( ) )
436440 . await ?;
437- Ok ( ( loader, asset) )
441+
442+ let handle = asset_server. get_or_create_path_handle_erased (
443+ path,
444+ asset. get_asset ( ) . asset_type_id ( ) ,
445+ None ,
446+ ) ;
447+ Ok ( ( handle, loader, asset) )
438448 }
439449}
440450
@@ -452,11 +462,11 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
452462 pub async fn load < ' p , A : Asset > (
453463 self ,
454464 path : impl Into < AssetPath < ' p > > ,
455- ) -> Result < NestedAssetRef < ' builder , A > , LoadDirectError > {
465+ ) -> Result < ( Handle < A > , NestedAssetRef < ' builder , A > ) , LoadDirectError > {
456466 let path = path. into ( ) . into_owned ( ) ;
457467 self . load_internal ( & path, Some ( TypeId :: of :: < A > ( ) ) )
458468 . await
459- . and_then ( move |( loader, untyped_asset) | {
469+ . and_then ( move |( handle , loader, untyped_asset) | {
460470 untyped_asset
461471 . downcast :: < A > ( )
462472 . map_err ( |_| LoadDirectError :: LoadError {
@@ -468,6 +478,7 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
468478 loader_name : loader. type_name ( ) ,
469479 } ,
470480 } )
481+ . map ( |asset| ( handle. typed ( ) , asset) )
471482 } )
472483 }
473484}
@@ -482,12 +493,12 @@ impl<'builder> NestedLoader<'_, 'builder, DynamicTyped, Immediate<'builder, '_>>
482493 pub async fn load (
483494 self ,
484495 path : impl Into < AssetPath < ' _ > > ,
485- ) -> Result < NestedErasedAssetRef < ' builder > , LoadDirectError > {
496+ ) -> Result < ( UntypedHandle , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
486497 let path = path. into ( ) . into_owned ( ) ;
487498 let asset_type_id = Some ( self . typing . asset_type_id ) ;
488499 self . load_internal ( & path, asset_type_id)
489500 . await
490- . map ( |( _, asset) | asset)
501+ . map ( |( handle , _, asset) | ( handle , asset) )
491502 }
492503}
493504
@@ -498,10 +509,10 @@ impl<'builder> NestedLoader<'_, 'builder, UnknownTyped, Immediate<'builder, '_>>
498509 pub async fn load (
499510 self ,
500511 path : impl Into < AssetPath < ' _ > > ,
501- ) -> Result < NestedErasedAssetRef < ' builder > , LoadDirectError > {
512+ ) -> Result < ( UntypedHandle , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
502513 let path = path. into ( ) . into_owned ( ) ;
503514 self . load_internal ( & path, None )
504515 . await
505- . map ( |( _, asset) | asset)
516+ . map ( |( handle , _, asset) | ( handle , asset) )
506517 }
507518}
0 commit comments