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§
Sourcefn into_raw(self) -> *mut dyn Future<Output = T> + 'a
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.
Sourceunsafe fn drop(ptr: *mut dyn Future<Output = T> + 'a)
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
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.