Trait uniffi::Lift

source ·
pub unsafe trait Lift<UT>: Sized {
    type FfiType;

    const TYPE_ID_META: MetadataBuffer;

    // Required methods
    fn try_lift(v: Self::FfiType) -> Result<Self, Error>;
    fn try_read(buf: &mut &[u8]) -> Result<Self, Error>;

    // Provided method
    fn try_lift_from_rust_buffer(v: RustBuffer) -> Result<Self, Error> { ... }
}
Expand description

Reexport items from other uniffi creates Lift values passed by the foreign code over the FFI into Rust values

This is used by the code generation to handle arguments. It’s usually derived from FfiConverter, except for types that only support lifting but not lowering.

See FfiConverter for a discussion of the methods

Safety

All traits are unsafe (implementing it requires unsafe impl) because we can’t guarantee that it’s safe to pass your type out to foreign-language code and back again. Buggy implementations of this trait might violate some assumptions made by the generated code, or might not match with the corresponding code in the generated foreign-language bindings. These traits should not be used directly, only in generated code, and the generated code should have fixture tests to test that everything works correctly together.

Required Associated Types§

Required Associated Constants§

Required Methods§

source

fn try_lift(v: Self::FfiType) -> Result<Self, Error>

source

fn try_read(buf: &mut &[u8]) -> Result<Self, Error>

Provided Methods§

source

fn try_lift_from_rust_buffer(v: RustBuffer) -> Result<Self, Error>

Convenience method

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<K, V, UT> Lift<UT> for HashMap<K, V>
where K: Lift<UT> + Hash + Eq, V: Lift<UT>,

source§

impl<T, UT> Lift<UT> for Arc<T>
where Arc<T>: FfiConverter<UT>, T: ?Sized,

§

type FfiType = <Arc<T> as FfiConverter<UT>>::FfiType

source§

fn try_lift(v: <Arc<T> as Lift<UT>>::FfiType) -> Result<Arc<T>, Error>

source§

fn try_read(buf: &mut &[u8]) -> Result<Arc<T>, Error>

source§

const TYPE_ID_META: MetadataBuffer = _

source§

impl<UT> Lift<UT> for bool

source§

impl<UT> Lift<UT> for f32

source§

impl<UT> Lift<UT> for f64

source§

impl<UT> Lift<UT> for i8

source§

impl<UT> Lift<UT> for i16

source§

impl<UT> Lift<UT> for i32

source§

impl<UT> Lift<UT> for i64

source§

impl<UT> Lift<UT> for u8

source§

impl<UT> Lift<UT> for u16

source§

impl<UT> Lift<UT> for u32

source§

impl<UT> Lift<UT> for u64

source§

impl<UT> Lift<UT> for String

source§

impl<UT> Lift<UT> for SystemTime

source§

impl<UT, T> Lift<UT> for Vec<T>
where T: Lift<UT>,

Support for associative arrays via the FFI - record<u32, u64> in UDL. HashMaps are currently always passed by serializing to a buffer. We write a i32 entries count followed by each entry (string key followed by the value) in turn. (It’s a signed type due to limits of the JVM).

Implementors§