@@ -386,23 +386,29 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
386386 self ,
387387 path : & AssetPath < ' static > ,
388388 asset_type_id : Option < TypeId > ,
389- ) -> Result < ( Arc < dyn ErasedAssetLoader > , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
389+ ) -> Result <
390+ (
391+ UntypedHandle ,
392+ Arc < dyn ErasedAssetLoader > ,
393+ NestedErasedAssetRef < ' builder > ,
394+ ) ,
395+ LoadDirectError ,
396+ > {
390397 if path. label ( ) . is_some ( ) {
391398 return Err ( LoadDirectError :: RequestedSubasset ( path. clone ( ) ) ) ;
392399 }
400+ let asset_server = self . load_context . asset_server . clone ( ) ;
393401 let ( mut meta, loader, mut reader) = if let Some ( reader) = self . mode . reader {
394402 let loader = if let Some ( asset_type_id) = asset_type_id {
395- self . load_context
396- . asset_server
403+ asset_server
397404 . get_asset_loader_with_asset_type_id ( asset_type_id)
398405 . await
399406 . map_err ( |error| LoadDirectError :: LoadError {
400407 dependency : path. clone ( ) ,
401408 error : error. into ( ) ,
402409 } ) ?
403410 } else {
404- self . load_context
405- . asset_server
411+ asset_server
406412 . get_path_asset_loader ( path)
407413 . await
408414 . map_err ( |error| LoadDirectError :: LoadError {
@@ -413,9 +419,7 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
413419 let meta = loader. default_meta ( ) ;
414420 ( meta, loader, ReaderRef :: Borrowed ( reader) )
415421 } else {
416- let ( meta, loader, reader) = self
417- . load_context
418- . asset_server
422+ let ( meta, loader, reader) = asset_server
419423 . get_meta_loader_and_reader ( path, asset_type_id)
420424 . await
421425 . map_err ( |error| LoadDirectError :: LoadError {
@@ -433,7 +437,13 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
433437 . load_context
434438 . load_direct_internal ( path. clone ( ) , meta. as_ref ( ) , & * loader, reader. as_mut ( ) )
435439 . await ?;
436- Ok ( ( loader, asset) )
440+
441+ let handle = asset_server. get_or_create_path_handle_erased (
442+ path,
443+ asset. get_asset ( ) . asset_type_id ( ) ,
444+ None ,
445+ ) ;
446+ Ok ( ( handle, loader, asset) )
437447 }
438448}
439449
@@ -451,11 +461,11 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
451461 pub async fn load < ' p , A : Asset > (
452462 self ,
453463 path : impl Into < AssetPath < ' p > > ,
454- ) -> Result < NestedAssetRef < ' builder , A > , LoadDirectError > {
464+ ) -> Result < ( Handle < A > , NestedAssetRef < ' builder , A > ) , LoadDirectError > {
455465 let path = path. into ( ) . into_owned ( ) ;
456466 self . load_internal ( & path, Some ( TypeId :: of :: < A > ( ) ) )
457467 . await
458- . and_then ( move |( loader, untyped_asset) | {
468+ . and_then ( move |( handle , loader, untyped_asset) | {
459469 untyped_asset
460470 . downcast :: < A > ( )
461471 . map_err ( |_| LoadDirectError :: LoadError {
@@ -467,6 +477,7 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
467477 loader_name : loader. type_name ( ) ,
468478 } ,
469479 } )
480+ . map ( |asset| ( handle. typed ( ) , asset) )
470481 } )
471482 }
472483}
@@ -481,12 +492,12 @@ impl<'builder> NestedLoader<'_, 'builder, DynamicTyped, Immediate<'builder, '_>>
481492 pub async fn load (
482493 self ,
483494 path : impl Into < AssetPath < ' _ > > ,
484- ) -> Result < NestedErasedAssetRef < ' builder > , LoadDirectError > {
495+ ) -> Result < ( UntypedHandle , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
485496 let path = path. into ( ) . into_owned ( ) ;
486497 let asset_type_id = Some ( self . typing . asset_type_id ) ;
487498 self . load_internal ( & path, asset_type_id)
488499 . await
489- . map ( |( _, asset) | asset)
500+ . map ( |( handle , _, asset) | ( handle , asset) )
490501 }
491502}
492503
@@ -497,10 +508,10 @@ impl<'builder> NestedLoader<'_, 'builder, UnknownTyped, Immediate<'builder, '_>>
497508 pub async fn load (
498509 self ,
499510 path : impl Into < AssetPath < ' _ > > ,
500- ) -> Result < NestedErasedAssetRef < ' builder > , LoadDirectError > {
511+ ) -> Result < ( UntypedHandle , NestedErasedAssetRef < ' builder > ) , LoadDirectError > {
501512 let path = path. into ( ) . into_owned ( ) ;
502513 self . load_internal ( & path, None )
503514 . await
504- . map ( |( _, asset) | asset)
515+ . map ( |( handle , _, asset) | ( handle , asset) )
505516 }
506517}
0 commit comments