futures_util::task

Trait UnsafeFutureObj

source
pub unsafe trait UnsafeFutureObj<'a, T>: 'a {
    // Required methods
    fn into_raw(self) -> *mut dyn Future<Output = T> + 'a;
    unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a);
}
Expand description

A custom implementation of a future trait object for FutureObj, providing a vtable with drop support.

This custom representation is typically used only in no_std contexts, where the default Box-based implementation is not available.

§Safety

See the safety notes on individual methods for what guarantees an implementor must provide.

Required Methods§

source

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

Convert an owned instance into a (conceptually owned) fat pointer.

§Safety
§Implementor

The trait implementor must guarantee that it is safe to convert the provided *mut (dyn Future<Output = T> + 'a) into a Pin<&mut (dyn Future<Output = T> + 'a)> and call methods on it, non-reentrantly, until UnsafeFutureObj::drop is called with it.

source

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

Drops the future represented by the given fat pointer.

§Safety
§Implementor

The trait implementor must guarantee that it is safe to call this function once per into_raw invocation.

§Caller

The caller must ensure:

  • the pointer passed was obtained from an into_raw invocation from this same trait object
  • the pointer is not currently in use as a Pin<&mut (dyn Future<Output = T> + 'a)>
  • the pointer must not be used again after this function is called

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'a, T> UnsafeFutureObj<'a, T> for &'a mut (dyn Future<Output = T> + Unpin)

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(_ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T> UnsafeFutureObj<'a, T> for Box<dyn Future<Output = T> + 'a>
where T: 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T> UnsafeFutureObj<'a, T> for Box<dyn Future<Output = T> + Send + 'a>
where T: 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T> UnsafeFutureObj<'a, T> for Pin<&'a mut dyn Future<Output = T>>

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(_ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T> UnsafeFutureObj<'a, T> for Pin<Box<dyn Future<Output = T> + 'a>>
where T: 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T> UnsafeFutureObj<'a, T> for Pin<Box<dyn Future<Output = T> + Send + 'a>>
where T: 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T, F> UnsafeFutureObj<'a, T> for &'a mut F
where F: Future<Output = T> + Unpin + 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(_ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T, F> UnsafeFutureObj<'a, T> for Box<F>
where F: Future<Output = T> + 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T, F> UnsafeFutureObj<'a, T> for Pin<&'a mut F>
where F: Future<Output = T> + 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(_ptr: *mut dyn Future<Output = T> + 'a)

source§

impl<'a, T, F> UnsafeFutureObj<'a, T> for Pin<Box<F>>
where F: Future<Output = T> + 'a,

source§

fn into_raw(self) -> *mut dyn Future<Output = T> + 'a

source§

unsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)

Implementors§