Struct AssetHandle

Source
pub struct AssetHandle<T: Asset>(/* private fields */);
Expand description

A thread-safe, reference-counted handle to a loaded asset’s data.

This struct acts as a smart pointer that provides shared ownership of asset data in memory. It is the primary way that game logic and systems should interact with loaded assets.

Cloning an AssetHandle is a very cheap operation, as it only increments an atomic reference counter. It does not duplicate the underlying asset data. The asset data is automatically deallocated when the last handle pointing to it is dropped.

This handle dereferences to &T, allowing for transparent, read-only access to the asset’s contents.

§Examples

let texture = Texture {};

// The AssetAgent creates the first handle when loading is complete.
let handle1 = AssetHandle::new(texture);

// Other systems can clone the handle to share access.
let handle2 = handle1.clone();

// Accessing the data is done via dereferencing (like with `Arc` or `Box`).
// let width = handle1.width; // Assuming Texture has a `width` field.

Implementations§

Source§

impl<T: Asset> AssetHandle<T>

Source

pub fn new(asset: T) -> Self

Creates a new AssetHandle that takes ownership of the asset data.

This is typically called by an asset loading system (like an AssetAgent) once an asset has been successfully loaded into memory.

Trait Implementations§

Source§

impl<T: Asset> Clone for AssetHandle<T>

Source§

fn clone(&self) -> Self

Clones the handle, incrementing the reference count to the underlying asset.

1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug + Asset> Debug for AssetHandle<T>

Source§

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

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

impl<T: Asset> Deref for AssetHandle<T>

Source§

fn deref(&self) -> &Self::Target

Provides transparent, immutable access to the underlying asset data.

Source§

type Target = T

The resulting type after dereferencing.

Auto Trait Implementations§

§

impl<T> Freeze for AssetHandle<T>

§

impl<T> RefUnwindSafe for AssetHandle<T>
where T: RefUnwindSafe,

§

impl<T> Send for AssetHandle<T>

§

impl<T> Sync for AssetHandle<T>

§

impl<T> Unpin for AssetHandle<T>

§

impl<T> UnwindSafe for AssetHandle<T>
where T: RefUnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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>,

Source§

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.