pub struct AssetCache<S = FileSystem> { /* private fields */ }
Expand description

The main structure of this crate, used to cache assets.

It uses interior mutability, so assets can be added in the cache without requiring a mutable reference, but one is required to remove an asset.

Within the cache, assets are identified with their type and a string. This string is constructed from the asset path, replacing / by . and removing the extension. Given that, you cannot use . in your file names except for the extension.

Note: Using symbolic or hard links within the cached directory can lead to surprising behavior (especially with hot-reloading), and thus should be avoided.

Example

use assets_manager::{Asset, AssetCache, loader};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct Point {
    x: i32,
    y: i32,
}

impl Asset for Point {
    const EXTENSION: &'static str = "ron";
    type Loader = loader::RonLoader;
}

// Create a cache
let cache = AssetCache::new("assets")?;

// Get an asset from the file `assets/common/position.ron`
let point_handle = cache.load::<Point>("common.position")?;

// Read it
let point = point_handle.read();
println!("Loaded position: {:?}", point);

// Release the lock
drop(point);

// Use hot-reloading
loop {
    cache.hot_reload();
    println!("Position: {:?}", point_handle.read());
}

Implementations§

Creates a cache that loads assets from the given directory.

Errors

An error will be returned if path is not valid readable directory.

Creates a cache that loads assets from the given source and tries to start hot-reloading (if feature hot-reloading is used).

If hot-reloading fails to start, an error is logged.

Creates a cache that loads assets from the given source.

Returns a reference to the cache’s Source.

Temporarily prevent Compound dependencies to be recorded.

This function disables dependencies recording in Compound::load. Assets loaded during the given closure will not be recorded as dependencies and the currently loading asset will not be reloaded when they are.

When hot-reloading is disabled or if the cache’s Source does not support hot-reloading, this function only returns the result of the closure given as parameter.

Gets a value from the cache.

The value does not have to be an asset, but if it is not, its type must be marked with the Storable trait.

This function does not attempt to load the value from the source if it is not found in the cache.

Gets a value from the cache or inserts one.

As for get_cached, non-assets types must be marked with Storable.

Returns true if the cache contains the specified asset.

Removes an asset from the cache, and returns whether it was present in the cache.

Note that you need a mutable reference to the cache, so you cannot have any Handle, AssetGuard, etc when you call this function.

Takes ownership on a cached asset.

The corresponding asset is removed from the cache.

Clears the cache.

Removes all cached assets and directories.

Converts to an AnyCache.

Loads an asset.

If the asset is not found in the cache, it is loaded from the source.

Errors

Errors for Assets can occur in several cases :

  • The source could not be read
  • Loaded data could not be converted properly
  • The asset has no extension

Loads an asset and panic if an error happens.

Panics

Panics if an error happens while loading the asset (see load).

Loads an directory from the cache.

This function does not attempt to load the it from the source if it is not found in the cache.

Returns true if the cache contains the specified directory with the given recursive parameter.

Loads all assets of a given type from a directory.

If recursive is true, this function also loads assets recursively from subdirectories.

The directory’s id is constructed the same way as assets. To specify the cache’s root, give the empty string ("") as id.

The returned structure can be use to iterate over the loaded assets.

Errors

An error is returned if the given id does not match a valid readable directory.

When loading a directory recursively, directories that can’t be read are ignored.

Loads an owned version of an asset

Note that the asset will not be fetched from the cache nor will it be cached. In addition, hot-reloading does not affect the returned value (if used during Compound::load. It will still be registered as a dependency).

This can be useful if you need ownership on a non-clonable value.

Available on crate feature hot-reloading only.

Reloads changed assets.

This function is typically called within a loop.

If an error occurs while reloading an asset, a warning will be logged and the asset will be left unchanged.

This function blocks the current thread until all changed assets are reloaded, but it does not perform any I/O. However, it needs to lock some assets for writing, so you must not have any AssetGuard from the given AssetCache, or you might experience deadlocks. You are free to keep Handles, though.

If self.source() was created without hot-reloading or if it failed to start, this function is a no-op.

Available on crate feature hot-reloading only.

Enhances hot-reloading.

Having a 'static reference to the cache enables some optimizations, which you can take advantage of with this function. If an AssetCache is behind a 'static reference, you should always prefer using this function over hot_reload.

You only have to call this function once for it to take effect. After calling this function, subsequent calls to hot_reload and to this function have no effect.

If self.source() was created without hot-reloading or if it failed to start, this function is a no-op.

Trait Implementations§

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.