@@ -90,7 +90,7 @@ impl<S: AssetSaver> ErasedAssetSaver for S {
9090#[ derive( Clone ) ]
9191pub struct SavedAsset < ' a , ' b , A : Asset > {
9292 value : & ' a A ,
93- labeled_assets : Moo < ' b , HashMap < & ' a str , LabeledSavedAsset < ' a > > > ,
93+ labeled_assets : Moo < ' b , HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > > ,
9494}
9595
9696impl < A : Asset > Deref for SavedAsset < ' _ , ' _ , A > {
@@ -104,7 +104,7 @@ impl<A: Asset> Deref for SavedAsset<'_, '_, A> {
104104impl < ' a , ' b , A : Asset > SavedAsset < ' a , ' b , A > {
105105 fn from_value_and_labeled_saved_assets (
106106 value : & ' a A ,
107- labeled_saved_assets : & ' b HashMap < & ' a str , LabeledSavedAsset < ' a > > ,
107+ labeled_saved_assets : & ' b HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > ,
108108 ) -> Self {
109109 Self {
110110 value,
@@ -123,7 +123,7 @@ impl<'a, 'b, A: Asset> SavedAsset<'a, 'b, A> {
123123 . iter ( )
124124 . map ( |( label, labeled_asset) | {
125125 (
126- label. borrow ( ) ,
126+ CowArc :: Borrowed ( label. borrow ( ) ) ,
127127 LabeledSavedAsset :: from_labeled_asset ( labeled_asset) ,
128128 )
129129 } )
@@ -207,7 +207,7 @@ impl<'a, 'b, A: Asset> SavedAsset<'a, 'b, A> {
207207#[ derive( Clone ) ]
208208pub struct ErasedSavedAsset < ' a : ' b , ' b > {
209209 value : & ' a dyn AssetContainer ,
210- labeled_assets : Moo < ' b , HashMap < & ' a str , LabeledSavedAsset < ' a > > > ,
210+ labeled_assets : Moo < ' b , HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > > ,
211211}
212212
213213impl < ' a > ErasedSavedAsset < ' a , ' _ > {
@@ -219,7 +219,10 @@ impl<'a> ErasedSavedAsset<'a, '_> {
219219 . labeled_assets
220220 . iter ( )
221221 . map ( |( label, asset) | {
222- ( label. borrow ( ) , LabeledSavedAsset :: from_labeled_asset ( asset) )
222+ (
223+ CowArc :: Borrowed ( label. borrow ( ) ) ,
224+ LabeledSavedAsset :: from_labeled_asset ( asset) ,
225+ )
223226 } )
224227 . collect ( ) ,
225228 ) ,
@@ -265,7 +268,7 @@ impl<'a> LabeledSavedAsset<'a> {
265268/// This is commonly used in tandem with [`save_using_saver`].
266269pub struct SavedAssetBuilder < ' a > {
267270 /// The labeled assets for this saved asset.
268- labeled_assets : HashMap < & ' a str , LabeledSavedAsset < ' a > > ,
271+ labeled_assets : HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > ,
269272 /// The asset path (with no label) that this saved asset is "tied" to.
270273 ///
271274 /// All labeled assets will use this asset path (with their substituted labels). Note labeled
@@ -292,11 +295,12 @@ impl<'a> SavedAssetBuilder<'a> {
292295 /// an asset).
293296 ///
294297 /// This is primarily used when **constructing** a new asset to be saved.
295- pub fn add_labeled_asset_with_new_handle < A : Asset > (
298+ pub fn add_labeled_asset_with_new_handle < ' b : ' a , A : Asset > (
296299 & mut self ,
297- label : & ' a str ,
300+ label : impl Into < CowArc < ' b , str > > ,
298301 asset : SavedAsset < ' a , ' a , A > ,
299302 ) -> Handle < A > {
303+ let label = label. into ( ) ;
300304 let handle = Handle :: Strong (
301305 self . asset_server
302306 . read_infos ( )
@@ -317,22 +321,27 @@ impl<'a> SavedAssetBuilder<'a> {
317321 ///
318322 /// This is primarily used when attempting to save an existing asset (which already has its
319323 /// handles populated).
320- pub fn add_labeled_asset_with_existing_handle < A : Asset > (
324+ pub fn add_labeled_asset_with_existing_handle < ' b : ' a , A : Asset > (
321325 & mut self ,
322- label : & ' a str ,
326+ label : impl Into < CowArc < ' b , str > > ,
323327 asset : SavedAsset < ' a , ' a , A > ,
324328 handle : Handle < A > ,
325329 ) {
326- self . add_labeled_asset_with_existing_handle_erased ( label, asset. upcast ( ) , handle. untyped ( ) ) ;
330+ self . add_labeled_asset_with_existing_handle_erased (
331+ label. into ( ) ,
332+ asset. upcast ( ) ,
333+ handle. untyped ( ) ,
334+ ) ;
327335 }
328336
329337 /// Same as [`Self::add_labeled_asset_with_new_handle`], but type-erased to allow for dynamic
330338 /// types.
331- pub fn add_labeled_asset_with_new_handle_erased (
339+ pub fn add_labeled_asset_with_new_handle_erased < ' b : ' a > (
332340 & mut self ,
333- label : & ' a str ,
341+ label : impl Into < CowArc < ' b , str > > ,
334342 asset : ErasedSavedAsset < ' a , ' a > ,
335343 ) -> UntypedHandle {
344+ let label = label. into ( ) ;
336345 let handle = UntypedHandle :: Strong (
337346 self . asset_server
338347 . read_infos ( )
@@ -351,15 +360,15 @@ impl<'a> SavedAssetBuilder<'a> {
351360
352361 /// Same as [`Self::add_labeled_asset_with_existing_handle`], but type-erased to allow for
353362 /// dynamic types.
354- pub fn add_labeled_asset_with_existing_handle_erased (
363+ pub fn add_labeled_asset_with_existing_handle_erased < ' b : ' a > (
355364 & mut self ,
356- label : & ' a str ,
365+ label : impl Into < CowArc < ' b , str > > ,
357366 asset : ErasedSavedAsset < ' a , ' a > ,
358367 handle : UntypedHandle ,
359368 ) {
360369 // TODO: Check asset and handle have the same type.
361370 self . labeled_assets
362- . insert ( label, LabeledSavedAsset { asset, handle } ) ;
371+ . insert ( label. into ( ) , LabeledSavedAsset { asset, handle } ) ;
363372 }
364373
365374 /// Creates the final saved asset from this builder.
@@ -548,7 +557,7 @@ pub(crate) mod tests {
548557 let mut asset_labels = saved_asset
549558 . labeled_assets
550559 . keys ( )
551- . copied ( )
560+ . map ( |label| label . as_ref ( ) . to_string ( ) )
552561 . collect :: < Vec < _ > > ( ) ;
553562 asset_labels. sort ( ) ;
554563 assert_eq ! ( asset_labels, & [ "goodbye" , "hiya" , "idk" ] ) ;
@@ -638,7 +647,7 @@ pub(crate) mod tests {
638647 let mut asset_labels = saved_asset
639648 . labeled_assets
640649 . keys ( )
641- . copied ( )
650+ . map ( |label| label . as_ref ( ) . to_string ( ) )
642651 . collect :: < Vec < _ > > ( ) ;
643652 asset_labels. sort ( ) ;
644653 assert_eq ! ( asset_labels, & [ "goodbye" , "hiya" , "idk" ] ) ;
0 commit comments