Struct assets_manager::AssetCache

source ·
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§

source§

impl AssetCache<FileSystem>

source

pub fn new<P: AsRef<Path>>(path: P) -> Result<AssetCache<FileSystem>>

Creates a cache that loads assets from the given directory.

§Errors

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

source§

impl<S: Source> AssetCache<S>

source

pub fn with_source(source: S) -> AssetCache<S>

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.

source

pub fn without_hot_reloading(source: S) -> AssetCache<S>

Creates a cache that loads assets from the given source.

source

pub fn raw_source(&self) -> &S

Returns a reference to the cache’s Source.

source

pub fn no_record<T, F: FnOnce() -> T>(&self, f: F) -> T

Temporarily prevent Compound dependencies to be recorded.

See AnyCache::no_record for more details.

source

pub fn load<T: Compound>(&self, id: &str) -> Result<&Handle<T>, Error>

Loads an asset.

See AnyCache::load for more details.

source

pub fn load_expect<T: Compound>(&self, id: &str) -> &Handle<T>

Loads an asset and panic if an error happens.

See AnyCache::load_expect for more details.

source

pub fn get_cached<T: Storable>(&self, id: &str) -> Option<&Handle<T>>

Gets a value from the cache.

See AnyCache::get_cached for more details.

source

pub fn get_or_insert<T: Storable>(&self, id: &str, default: T) -> &Handle<T>

Gets a value from the cache or inserts one.

See AnyCache::get_or_insert for more details.

source

pub fn contains<T: Storable>(&self, id: &str) -> bool

Returns true if the cache contains the specified asset.

See AnyCache::contains for more details.

source

pub fn load_dir<T: DirLoadable>( &self, id: &str ) -> Result<&Handle<Directory<T>>, Error>

Loads a directory.

See AnyCache::load_dir for more details.

source

pub fn load_rec_dir<T: DirLoadable>( &self, id: &str ) -> Result<&Handle<RecursiveDirectory<T>>, Error>

Loads a directory.

See AnyCache::load_dir for more details.

source

pub fn load_owned<T: Compound>(&self, id: &str) -> Result<T, Error>

Loads an owned version of an asset.

See AnyCache::load_owned for more details.

source

pub fn as_any_cache(&self) -> AnyCache<'_>

Converts to an AnyCache.

source§

impl<S: Source> AssetCache<S>

source

pub fn remove<T: Storable>(&mut self, id: &str) -> bool

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, AssetReadGuard, etc when you call this function.

source

pub fn take<T: Storable>(&mut self, id: &str) -> Option<T>

Takes ownership on a cached asset.

The corresponding asset is removed from the cache.

source

pub fn clear(&mut self)

Clears the cache.

Removes all cached assets and directories.

source§

impl<S> AssetCache<S>
where S: Source + Sync,

source

pub fn hot_reload(&self)

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 AssetReadGuard 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.

source

pub fn enhance_hot_reloading(&'static self)

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§

source§

impl<'a, S: Source> AsAnyCache<'a> for &'a AssetCache<S>

source§

fn as_any_cache(&self) -> AnyCache<'a>

Converts this type to an AnyCache.
source§

impl<S> Debug for AssetCache<S>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<S> Default for AssetCache<S>
where S: Source + Default,

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<S> Freeze for AssetCache<S>
where S: Freeze,

§

impl<S = FileSystem> !RefUnwindSafe for AssetCache<S>

§

impl<S> Send for AssetCache<S>
where S: Send,

§

impl<S> Sync for AssetCache<S>
where S: Sync,

§

impl<S> Unpin for AssetCache<S>
where S: Unpin,

§

impl<S = FileSystem> !UnwindSafe for AssetCache<S>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<S> FromSample<S> for S

source§

fn from_sample_(s: S) -> S

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

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

source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

source§

fn to_sample_(self) -> U

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,