pub trait LongRefFromWasmAbi: WasmDescribe {
    type Abi: WasmAbi;
    type Anchor: Borrow<Self>;

    unsafe fn long_ref_from_abi(js: Self::Abi) -> Self::Anchor;
}
Expand description

A version of the RefFromWasmAbi trait with the additional requirement that the reference must remain valid as long as the anchor isn’t dropped.

This isn’t the case for JsValue’s RefFromWasmAbi implementation. To avoid having to allocate a spot for the JsValue on the JsValue heap, the JsValue is instead pushed onto the JsValue stack, and popped off again after the function that the reference was passed to returns. So, JsValue has a different LongRefFromWasmAbi implementation that behaves the same as FromWasmAbi, putting the value on the heap.

This is needed for async functions, where the reference needs to be valid for the whole length of the Future, rather than the initial synchronous call.

‘long ref’ is short for ‘long-lived reference’.

Required Associated Types§

source

type Abi: WasmAbi

Same as RefFromWasmAbi::Abi

source

type Anchor: Borrow<Self>

Same as RefFromWasmAbi::Anchor

Required Methods§

source

unsafe fn long_ref_from_abi(js: Self::Abi) -> Self::Anchor

Same as RefFromWasmAbi::ref_from_abi

Implementations on Foreign Types§

source§

impl LongRefFromWasmAbi for [u8]

source§

impl LongRefFromWasmAbi for [i8]

source§

impl LongRefFromWasmAbi for [u16]

source§

impl LongRefFromWasmAbi for [i16]

source§

impl LongRefFromWasmAbi for [u32]

source§

impl LongRefFromWasmAbi for [i32]

source§

impl LongRefFromWasmAbi for [u64]

source§

impl LongRefFromWasmAbi for [i64]

source§

impl LongRefFromWasmAbi for [usize]

source§

impl LongRefFromWasmAbi for [isize]

source§

impl LongRefFromWasmAbi for [f32]

source§

impl LongRefFromWasmAbi for [f64]

source§

impl LongRefFromWasmAbi for str

§

type Abi = <[u8] as RefFromWasmAbi>::Abi

§

type Anchor = Box<str, Global>

source§

unsafe fn long_ref_from_abi(js: Self::Abi) -> Self::Anchor

Implementors§