Trait UserData

Source
pub unsafe trait UserData: Sized + Clone {
    type Target: NativeClass;

    // Required methods
    fn new(val: Self::Target) -> Self;
    fn into_user_data(self) -> *const c_void;
    unsafe fn consume_user_data_unchecked(ptr: *const c_void) -> Self;
    unsafe fn clone_from_user_data_unchecked(ptr: *const c_void) -> Self;
}
Expand description

Trait for customizable user-data wrappers.

See module-level documentation for detailed explanation on user-data.

Required Associated Types§

Required Methods§

Source

fn new(val: Self::Target) -> Self

Creates a new owned wrapper from a NativeClass instance.

This operation must never fail.

Source

fn into_user_data(self) -> *const c_void

Takes a native instance and returns an opaque pointer that can be used to recover it.

This gives “ownership” to the engine.

This operation must never fail.

Source

unsafe fn consume_user_data_unchecked(ptr: *const c_void) -> Self

Takes an opaque pointer produced by into_user_data and “consumes” it to produce the original instance, keeping the reference count.

This should be used when “ownership” is taken from the engine, i.e. destructors. Use elsewhere can lead to premature drops of the instance contained inside.

ptr is guaranteed to be non-null.

This operation must never fail.

§Safety

ptr must be pointing to valid data of the correct type.

Source

unsafe fn clone_from_user_data_unchecked(ptr: *const c_void) -> Self

Takes an opaque pointer produced by into_user_data and “clones” it to produce the original instance, increasing the reference count.

This should be used when user data is “borrowed” from the engine.

ptr is guaranteed to be non-null.

This operation must never fail.

§Safety

ptr must be pointing to valid data of the correct type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> UserData for Aether<T>
where T: NativeClass + Copy + Default,

Source§

impl<T> UserData for ArcData<T>
where T: NativeClass + Send + Sync,

Source§

impl<T> UserData for LocalCellData<T>
where T: NativeClass,

Source§

impl<T> UserData for Once<T>
where T: NativeClass + Send,

Source§

impl<T, OPT> UserData for MutexData<T, OPT>
where T: NativeClass + Send, OPT: LockOptions,

Source§

impl<T, OPT> UserData for RwLockData<T, OPT>
where T: NativeClass + Send + Sync, OPT: LockOptions,