Struct stabby::future::StableWaker
source · #[repr(C)]pub struct StableWaker<'a, Alloc = LibcAlloc>where
Alloc: IAlloc,{ /* private fields */ }
Expand description
An ABI-stable waker.
This is done by wrapping a provided core::task::Waker
with calling convention-shims.
While this is the only way to guarantee ABI-stability when interacting with futures, this does add
a layer of indirection, and cloning this waker will cause an allocation. To bench the performance cost
of this wrapper and decide if you want to risk ABI-unstability on wakers, you may use RUST_FLAGS='--cfg unsafe_wakers="true"'
, which will turn StableWaker
into a newtype of core::task::Waker
.
Implementations§
source§impl<'a, Alloc> StableWaker<'a, Alloc>where
Alloc: IAlloc,
impl<'a, Alloc> StableWaker<'a, Alloc>where
Alloc: IAlloc,
sourcepub const fn has_optimal_layout() -> bool
pub const fn has_optimal_layout() -> bool
Returns true if the layout for StableWaker
is smaller or equal to that Rust would have generated for it.
source§impl<'a, Alloc> StableWaker<'a, Alloc>
impl<'a, Alloc> StableWaker<'a, Alloc>
sourcepub fn with_waker<F, U>(&self, f: F) -> U
pub fn with_waker<F, U>(&self, f: F) -> U
Turns this into a waker whose clone implementation is to clone the underlying waker into a stable Arc.
Trait Implementations§
source§impl<'a, Alloc> From<&'a Waker> for StableWaker<'a, Alloc>
impl<'a, Alloc> From<&'a Waker> for StableWaker<'a, Alloc>
source§fn from(value: &'a Waker) -> StableWaker<'a, Alloc>
fn from(value: &'a Waker) -> StableWaker<'a, Alloc>
Converts to this type from the input type.
source§impl<'a, Alloc> IStable for StableWaker<'a, Alloc>where
Alloc: IAlloc,
Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>>: IStable,
StableLike<&'a Waker, &'a ()>: IStable,
unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>: IStable,
StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>: IStable,
impl<'a, Alloc> IStable for StableWaker<'a, Alloc>where
Alloc: IAlloc,
Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>>: IStable,
StableLike<&'a Waker, &'a ()>: IStable,
unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>: IStable,
StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>: IStable,
§type ForbiddenValues = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::ForbiddenValues
type ForbiddenValues = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::ForbiddenValues
The values that the annotated type cannot occupy.
§type UnusedBits = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::UnusedBits
type UnusedBits = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::UnusedBits
The padding bits in the annotated types
§type Size = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::Size
type Size = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::Size
The size of the annotated type in bytes.
§type Align = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::Align
type Align = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::Align
The alignment of the annotated type in bytes.
§type HasExactlyOneNiche = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::HasExactlyOneNiche
type HasExactlyOneNiche = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::HasExactlyOneNiche
Allows the detection of whether or not
core::option::Option
s are stable: Read more§type ContainsIndirections = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::ContainsIndirections
type ContainsIndirections = <Struct<FieldPair<FieldPair<StableLike<&'a Waker, &'a ()>, unsafe extern "C" fn(_: StableLike<&'a Waker, &'a ()>) -> SharedStableWaker<Alloc>>, StableLike<unsafe extern "C" fn(_: &Waker), &'a ()>>> as IStable>::ContainsIndirections
Whether or not the type contains indirections (pointers, indices in independent data-structures…)
source§const REPORT: &'static TypeReport = _
const REPORT: &'static TypeReport = _
A compile-time generated report of the fields of the type, allowing for compatibility inspection.
source§const ID: u64 = _
const ID: u64 = _
A stable (and ideally unique) identifier for the type. Often generated using
crate::report::gen_id
, but can be manually set.Auto Trait Implementations§
impl<'a, Alloc> Freeze for StableWaker<'a, Alloc>
impl<'a, Alloc> RefUnwindSafe for StableWaker<'a, Alloc>
impl<'a, Alloc> Send for StableWaker<'a, Alloc>
impl<'a, Alloc> Sync for StableWaker<'a, Alloc>
impl<'a, Alloc> Unpin for StableWaker<'a, Alloc>
impl<'a, Alloc> UnwindSafe for StableWaker<'a, Alloc>
Blanket Implementations§
source§impl<Source> AccessAs for Source
impl<Source> AccessAs for Source
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more