Skip to main content

ForeignCallback

Struct ForeignCallback 

Source
pub struct ForeignCallback<V: Vtable> { /* private fields */ }
Expand description

A consumer-implemented callback interface held by the producer.

Holds the consumer’s ctx and a pointer to its static vtable V. The generated impl Trait for ForeignX calls vtable().method(ctx, ...) per method; dropping the last owner calls free(ctx).

Implementations§

Source§

impl<V: Vtable> ForeignCallback<V>

Source

pub unsafe fn from_raw( ctx: *mut c_void, vtable: *const V, ) -> Result<Option<Self>, VtableTooSmall>

Adopt a (ctx, vtable) pair lifted from a callback-interface parameter’s slots. Returns Ok(None) when the vtable pointer is null.

§Errors

Returns VtableTooSmall when the vtable’s size is smaller than V. The context is released through the header’s free first (when the header itself is complete), so a rejected callback doesn’t leak.

§Safety

vtable must be null or point to a vtable whose header is initialized and whose first size bytes stay valid and unmodified for the life of the returned value (consumers use a process-wide static). ctx must remain valid until the vtable’s free entry is called with it.

Source

pub fn ctx(&self) -> *mut c_void

The consumer’s context pointer, passed as the first argument of every vtable entry.

Source

pub fn vtable(&self) -> &V

The consumer’s vtable.

Trait Implementations§

Source§

impl<V: Vtable> Drop for ForeignCallback<V>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl<V: Vtable> Send for ForeignCallback<V>

Source§

impl<V: Vtable> Sync for ForeignCallback<V>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.