referrerpolicy=no-referrer-when-downgrade
sp_runtime_interface::host

Trait FromFFIValue

Source
pub trait FromFFIValue<'a>: RIType {
    type Owned;

    // Required methods
    fn from_ffi_value(
        context: &mut dyn FunctionContext,
        arg: Self::FFIType,
    ) -> Result<Self::Owned>;
    fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner;

    // Provided method
    fn write_back_into_runtime(
        _value: Self::Owned,
        _context: &mut dyn FunctionContext,
        _arg: Self::FFIType,
    ) -> Result<()> { ... }
}
Expand description

A type used as a parameter in a host function. Can be created from an FFI value.

Implementations are safe to assume that the arg given to from_ffi_value is only generated by the corresponding wasm::IntoFFIValue implementation.

Required Associated Types§

Source

type Owned

The owned inner type.

Required Methods§

Source

fn from_ffi_value( context: &mut dyn FunctionContext, arg: Self::FFIType, ) -> Result<Self::Owned>

Creates Self::Owned from the given arg received through the FFI boundary from the runtime.

Source

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Creates Self::Inner from an owned value.

Provided Methods§

Source

fn write_back_into_runtime( _value: Self::Owned, _context: &mut dyn FunctionContext, _arg: Self::FFIType, ) -> Result<()>

Write back a modified value back into the runtime’s memory.

Only makes sense for parameters like e.g. &mut [u8].

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.

Implementations on Foreign Types§

Source§

impl<'a> FromFFIValue<'a> for bool

Source§

type Owned = bool

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: u32) -> Result<bool>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for i8

Source§

type Owned = i8

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: i32) -> Result<i8>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for i16

Source§

type Owned = i16

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: i32) -> Result<i16>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for i32

Source§

type Owned = i32

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: i32) -> Result<i32>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for i64

Source§

type Owned = i64

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: i64) -> Result<i64>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for u8

Source§

type Owned = u8

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: u32) -> Result<u8>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for u16

Source§

type Owned = u16

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: u32) -> Result<u16>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for u32

Source§

type Owned = u32

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: u32) -> Result<u32>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Source§

impl<'a> FromFFIValue<'a> for u64

Source§

type Owned = u64

Source§

fn from_ffi_value(_: &mut dyn FunctionContext, arg: u64) -> Result<u64>

Source§

fn take_from_owned(owned: &'a mut Self::Owned) -> Self::Inner

Implementors§

Source§

impl<'a> FromFFIValue<'a> for PassFatPointerAndRead<&'a str>

Source§

impl<'a> FromFFIValue<'a> for PassFatPointerAndRead<&'a [u8]>

Source§

impl<'a> FromFFIValue<'a> for PassFatPointerAndRead<Vec<u8>>

Source§

impl<'a> FromFFIValue<'a> for PassFatPointerAndReadWrite<&'a mut [u8]>

Source§

impl<'a, T, U> FromFFIValue<'a> for PassAs<T, U>
where U: RIType + FromFFIValue<'a> + Primitive, T: TryFrom<<U as FromFFIValue<'a>>::Owned> + Copy,

Source§

type Owned = T

Source§

impl<'a, T, const N: usize> FromFFIValue<'a> for PassPointerAndRead<&'a T, N>
where T: From<[u8; N]>,

Source§

type Owned = T

Source§

impl<'a, T, const N: usize> FromFFIValue<'a> for PassPointerAndReadCopy<T, N>
where T: From<[u8; N]> + Copy,

Source§

type Owned = T

Source§

impl<'a, T, const N: usize> FromFFIValue<'a> for PassPointerAndWrite<&'a mut T, N>
where T: Default + AsRef<[u8]>,

Source§

type Owned = T

Source§

impl<'a, T: Decode> FromFFIValue<'a> for PassFatPointerAndDecode<T>

Source§

impl<'a, T: Decode> FromFFIValue<'a> for PassFatPointerAndDecodeSlice<&'a [T]>

Source§

type Owned = Vec<T>

Source§

impl<'a, T: PointerType> FromFFIValue<'a> for Pointer<T>

Source§

type Owned = Pointer<T>