@@ -86,7 +86,7 @@ impl<S: AssetSaver> ErasedAssetSaver for S {
8686#[ derive( Clone ) ]
8787pub struct SavedAsset < ' a , ' b , A : Asset > {
8888 value : & ' a A ,
89- labeled_assets : Moo < ' b , HashMap < & ' a str , LabeledSavedAsset < ' a > > > ,
89+ labeled_assets : Moo < ' b , HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > > ,
9090}
9191
9292impl < A : Asset > Deref for SavedAsset < ' _ , ' _ , A > {
@@ -100,7 +100,7 @@ impl<A: Asset> Deref for SavedAsset<'_, '_, A> {
100100impl < ' a , ' b , A : Asset > SavedAsset < ' a , ' b , A > {
101101 fn from_value_and_labeled_saved_assets (
102102 value : & ' a A ,
103- labeled_saved_assets : & ' b HashMap < & ' a str , LabeledSavedAsset < ' a > > ,
103+ labeled_saved_assets : & ' b HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > ,
104104 ) -> Self {
105105 Self {
106106 value,
@@ -119,7 +119,7 @@ impl<'a, 'b, A: Asset> SavedAsset<'a, 'b, A> {
119119 . iter ( )
120120 . map ( |( label, labeled_asset) | {
121121 (
122- label. borrow ( ) ,
122+ CowArc :: Borrowed ( label. borrow ( ) ) ,
123123 LabeledSavedAsset :: from_labeled_asset ( labeled_asset) ,
124124 )
125125 } )
@@ -203,7 +203,7 @@ impl<'a, 'b, A: Asset> SavedAsset<'a, 'b, A> {
203203#[ derive( Clone ) ]
204204pub struct ErasedSavedAsset < ' a : ' b , ' b > {
205205 value : & ' a dyn AssetContainer ,
206- labeled_assets : Moo < ' b , HashMap < & ' a str , LabeledSavedAsset < ' a > > > ,
206+ labeled_assets : Moo < ' b , HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > > ,
207207}
208208
209209impl < ' a > ErasedSavedAsset < ' a , ' _ > {
@@ -215,7 +215,10 @@ impl<'a> ErasedSavedAsset<'a, '_> {
215215 . labeled_assets
216216 . iter ( )
217217 . map ( |( label, asset) | {
218- ( label. borrow ( ) , LabeledSavedAsset :: from_labeled_asset ( asset) )
218+ (
219+ CowArc :: Borrowed ( label. borrow ( ) ) ,
220+ LabeledSavedAsset :: from_labeled_asset ( asset) ,
221+ )
219222 } )
220223 . collect ( ) ,
221224 ) ,
@@ -261,7 +264,7 @@ impl<'a> LabeledSavedAsset<'a> {
261264/// This is commonly used in tandem with [`save_using_saver`].
262265pub struct SavedAssetBuilder < ' a > {
263266 /// The labeled assets for this saved asset.
264- labeled_assets : HashMap < & ' a str , LabeledSavedAsset < ' a > > ,
267+ labeled_assets : HashMap < CowArc < ' a , str > , LabeledSavedAsset < ' a > > ,
265268 /// The asset path (with no label) that this saved asset is "tied" to.
266269 ///
267270 /// All labeled assets will use this asset path (with their substituted labels). Note labeled
@@ -288,11 +291,12 @@ impl<'a> SavedAssetBuilder<'a> {
288291 /// an asset).
289292 ///
290293 /// This is primarily used when **constructing** a new asset to be saved.
291- pub fn add_labeled_asset_with_new_handle < A : Asset > (
294+ pub fn add_labeled_asset_with_new_handle < ' b : ' a , A : Asset > (
292295 & mut self ,
293- label : & ' a str ,
296+ label : impl Into < CowArc < ' b , str > > ,
294297 asset : SavedAsset < ' a , ' a , A > ,
295298 ) -> Handle < A > {
299+ let label = label. into ( ) ;
296300 let handle = Handle :: Strong (
297301 self . asset_server
298302 . read_infos ( )
@@ -313,22 +317,27 @@ impl<'a> SavedAssetBuilder<'a> {
313317 ///
314318 /// This is primarily used when attempting to save an existing asset (which already has its
315319 /// handles populated).
316- pub fn add_labeled_asset_with_existing_handle < A : Asset > (
320+ pub fn add_labeled_asset_with_existing_handle < ' b : ' a , A : Asset > (
317321 & mut self ,
318- label : & ' a str ,
322+ label : impl Into < CowArc < ' b , str > > ,
319323 asset : SavedAsset < ' a , ' a , A > ,
320324 handle : Handle < A > ,
321325 ) {
322- self . add_labeled_asset_with_existing_handle_erased ( label, asset. upcast ( ) , handle. untyped ( ) ) ;
326+ self . add_labeled_asset_with_existing_handle_erased (
327+ label. into ( ) ,
328+ asset. upcast ( ) ,
329+ handle. untyped ( ) ,
330+ ) ;
323331 }
324332
325333 /// Same as [`Self::add_labeled_asset_with_new_handle`], but type-erased to allow for dynamic
326334 /// types.
327- pub fn add_labeled_asset_with_new_handle_erased (
335+ pub fn add_labeled_asset_with_new_handle_erased < ' b : ' a > (
328336 & mut self ,
329- label : & ' a str ,
337+ label : impl Into < CowArc < ' b , str > > ,
330338 asset : ErasedSavedAsset < ' a , ' a > ,
331339 ) -> UntypedHandle {
340+ let label = label. into ( ) ;
332341 let handle = UntypedHandle :: Strong (
333342 self . asset_server
334343 . read_infos ( )
@@ -347,15 +356,15 @@ impl<'a> SavedAssetBuilder<'a> {
347356
348357 /// Same as [`Self::add_labeled_asset_with_existing_handle`], but type-erased to allow for
349358 /// dynamic types.
350- pub fn add_labeled_asset_with_existing_handle_erased (
359+ pub fn add_labeled_asset_with_existing_handle_erased < ' b : ' a > (
351360 & mut self ,
352- label : & ' a str ,
361+ label : impl Into < CowArc < ' b , str > > ,
353362 asset : ErasedSavedAsset < ' a , ' a > ,
354363 handle : UntypedHandle ,
355364 ) {
356365 // TODO: Check asset and handle have the same type.
357366 self . labeled_assets
358- . insert ( label, LabeledSavedAsset { asset, handle } ) ;
367+ . insert ( label. into ( ) , LabeledSavedAsset { asset, handle } ) ;
359368 }
360369
361370 /// Creates the final saved asset from this builder.
@@ -544,7 +553,7 @@ pub(crate) mod tests {
544553 let mut asset_labels = saved_asset
545554 . labeled_assets
546555 . keys ( )
547- . copied ( )
556+ . map ( |label| label . as_ref ( ) . to_string ( ) )
548557 . collect :: < Vec < _ > > ( ) ;
549558 asset_labels. sort ( ) ;
550559 assert_eq ! ( asset_labels, & [ "goodbye" , "hiya" , "idk" ] ) ;
@@ -634,7 +643,7 @@ pub(crate) mod tests {
634643 let mut asset_labels = saved_asset
635644 . labeled_assets
636645 . keys ( )
637- . copied ( )
646+ . map ( |label| label . as_ref ( ) . to_string ( ) )
638647 . collect :: < Vec < _ > > ( ) ;
639648 asset_labels. sort ( ) ;
640649 assert_eq ! ( asset_labels, & [ "goodbye" , "hiya" , "idk" ] ) ;
0 commit comments