#[repr(C)]pub struct DynRef<'a, Vt>where
Vt: 'static,{ /* private fields */ }Expand description
A stable &'a dyn Traits
Implementations§
source§impl<'a, Vt> DynRef<'a, Vt>where
Vt: 'static,
impl<'a, Vt> DynRef<'a, Vt>where
Vt: 'static,
sourcepub const fn has_optimal_layout() -> bool
pub const fn has_optimal_layout() -> bool
Returns true if the layout for DynRef is smaller or equal to that Rust would have generated for it.
source§impl<'a, Vt> DynRef<'a, Vt>where
Vt: Copy + 'a,
impl<'a, Vt> DynRef<'a, Vt>where
Vt: Copy + 'a,
sourcepub fn into_super<Super>(self) -> Superwhere
DynRef<'a, Vt>: IntoSuperTrait<Super>,
pub fn into_super<Super>(self) -> Superwhere
DynRef<'a, Vt>: IntoSuperTrait<Super>,
Allows casting a dyn A + B into dyn A.
Note that you can only remove the outermost (rightmost in dyn syntax) trait at a time,
except Send and Sync that may both be kept, or both be removed.
sourcepub unsafe fn downcast<T>(&self) -> Option<&T>where
Vt: PartialEq + IConstConstructor<'a, T>,
pub unsafe fn downcast<T>(&self) -> Option<&T>where
Vt: PartialEq + IConstConstructor<'a, T>,
Downcasts the reference based on vtable equality.
This implies that this downcast will always yield None when attempting to downcast
values constructed accross an FFI.
§Safety
This may have false positives if all of the following applies:
selfwas built from&U, within the same FFI-boundary,TandUhave identical implementations for all methods of the vtable,- the compiler chose to merge these implementations, making
TandUshare their function pointers.
While all of these factors aligning is unlikely, you should be aware of this if you
plan on using methods of T that wouldn’t be valid for U.
sourcepub fn stable_downcast<T, Path>(&self) -> Option<&T>
pub fn stable_downcast<T, Path>(&self) -> Option<&T>
Downcasts the reference based on its reflection report.
Trait Implementations§
source§impl<StabbyVtProvider, StabbyTransitiveDerefN> AnyDyn<StabbyTransitiveDerefN> for DynRef<'_, StabbyVtProvider>
impl<StabbyVtProvider, StabbyTransitiveDerefN> AnyDyn<StabbyTransitiveDerefN> for DynRef<'_, StabbyVtProvider>
source§extern "C" fn report(&self) -> &'static TypeReport
extern "C" fn report(&self) -> &'static TypeReport
An stabby-generated item for Any
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O> Call0Dyn<StabbyTransitiveDerefN, O> for DynRef<'_, StabbyVtProvider>
impl<StabbyVtProvider, StabbyTransitiveDerefN, O> Call0Dyn<StabbyTransitiveDerefN, O> for DynRef<'_, StabbyVtProvider>
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0> Call1Dyn<StabbyTransitiveDerefN, O, I0> for DynRef<'_, StabbyVtProvider>
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0> Call1Dyn<StabbyTransitiveDerefN, O, I0> for DynRef<'_, StabbyVtProvider>
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1> Call2Dyn<StabbyTransitiveDerefN, O, I0, I1> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall2<O, I0, I1>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1> Call2Dyn<StabbyTransitiveDerefN, O, I0, I1> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall2<O, I0, I1>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2> Call3Dyn<StabbyTransitiveDerefN, O, I0, I1, I2> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall3<O, I0, I1, I2>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2> Call3Dyn<StabbyTransitiveDerefN, O, I0, I1, I2> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall3<O, I0, I1, I2>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3> Call4Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall4<O, I0, I1, I2, I3>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3> Call4Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall4<O, I0, I1, I2, I3>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4> Call5Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall5<O, I0, I1, I2, I3, I4>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4> Call5Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall5<O, I0, I1, I2, I3, I4>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5> Call6Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall6<O, I0, I1, I2, I3, I4, I5>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5> Call6Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall6<O, I0, I1, I2, I3, I4, I5>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6> Call7Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall7<O, I0, I1, I2, I3, I4, I5, I6>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6> Call7Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall7<O, I0, I1, I2, I3, I4, I5, I6>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7> Call8Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall8<O, I0, I1, I2, I3, I4, I5, I6, I7>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7> Call8Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall8<O, I0, I1, I2, I3, I4, I5, I6, I7>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7, I8> Call9Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7, I8> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall9<O, I0, I1, I2, I3, I4, I5, I6, I7, I8>, StabbyTransitiveDerefN> + Copy,
impl<StabbyVtProvider, StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7, I8> Call9Dyn<StabbyTransitiveDerefN, O, I0, I1, I2, I3, I4, I5, I6, I7, I8> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableCall9<O, I0, I1, I2, I3, I4, I5, I6, I7, I8>, StabbyTransitiveDerefN> + Copy,
source§impl<StabbyVtProvider, StabbyTransitiveDerefN, _stabby_unselfed_0> FutureDyn<StabbyTransitiveDerefN, _stabby_unselfed_0> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableFuture<_stabby_unselfed_0>, StabbyTransitiveDerefN> + Copy,
_stabby_unselfed_0: IDeterminantProvider<()>,
impl<StabbyVtProvider, StabbyTransitiveDerefN, _stabby_unselfed_0> FutureDyn<StabbyTransitiveDerefN, _stabby_unselfed_0> for DynRef<'_, StabbyVtProvider>where
StabbyVtProvider: TransitiveDeref<StabbyVtableFuture<_stabby_unselfed_0>, StabbyTransitiveDerefN> + Copy,
_stabby_unselfed_0: IDeterminantProvider<()>,
source§impl<'a, Vt> IStable for DynRef<'a, Vt>
impl<'a, Vt> IStable for DynRef<'a, Vt>
§type ForbiddenValues = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::ForbiddenValues
type ForbiddenValues = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::ForbiddenValues
§type UnusedBits = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::UnusedBits
type UnusedBits = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::UnusedBits
§type Size = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::Size
type Size = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::Size
§type Align = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::Align
type Align = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::Align
§type HasExactlyOneNiche = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::HasExactlyOneNiche
type HasExactlyOneNiche = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::HasExactlyOneNiche
core::option::Options are stable: Read more§type ContainsIndirections = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::ContainsIndirections
type ContainsIndirections = <Struct<FieldPair<FieldPair<&'a (), &'a Vt>, PhantomData<*mut ()>>> as IStable>::ContainsIndirections
source§const REPORT: &'static TypeReport = _
const REPORT: &'static TypeReport = _
source§const ID: u64 = _
const ID: u64 = _
crate::report::gen_id, but can be manually set.