pub trait ManagedType<M: ManagedTypeApi>: Sized {
    type OwnHandle: HandleConstraints;

    // Required methods
    fn get_handle(&self) -> Self::OwnHandle;
    fn transmute_from_handle_ref(handle_ref: &Self::OwnHandle) -> &Self;

    // Provided methods
    fn get_raw_handle(&self) -> RawHandle { ... }
    fn as_ref(&self) -> ManagedRef<'_, M, Self> { ... }
}
Expand description

Commonalities between all managed types.

Required Associated Types§

Required Methods§

source

fn get_handle(&self) -> Self::OwnHandle

source

fn transmute_from_handle_ref(handle_ref: &Self::OwnHandle) -> &Self

Implement carefully, since the underlying transmutation is an unsafe operation. For types that wrap a handle to some VM-managed data, make sure the type only contains the handle (plus ZSTs if necessary). For types that just wrap another managed type it is easier, call for the wrapped object.

Provided Methods§

source

fn get_raw_handle(&self) -> RawHandle

source

fn as_ref(&self) -> ManagedRef<'_, M, Self>

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<A> ManagedType<A> for StorageKey<A>
where A: ManagedTypeApi + ErrorApi + 'static,

source§

impl<M> ManagedType<M> for ManagedAddress<M>
where M: ManagedTypeApi,

source§

impl<M> ManagedType<M> for ManagedArgBuffer<M>
where M: ManagedTypeApi + 'static,

source§

impl<M, T> ManagedType<M> for ManagedVec<M, T>

source§

impl<M, T> ManagedType<M> for MultiValueManagedVec<M, T>

source§

impl<M, const N: usize> ManagedType<M> for ManagedByteArray<M, N>
where M: ManagedTypeApi,

source§

impl<M: ManagedTypeApi> ManagedType<M> for BigFloat<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for BigInt<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for BigUint<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for EllipticCurve<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for ManagedBuffer<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for ManagedMap<M>

source§

impl<M: ManagedTypeApi> ManagedType<M> for TokenIdentifier<M>