Skip to main content

ErasableGeneric

Trait ErasableGeneric 

Source
pub unsafe trait ErasableGeneric {
    type Repr;
}
Expand description

Private marker trait for erasable generics - types with this trait have the same repr for all generic param values, and can therefore be transmuted on the singular Repr type representation on ABI boundaries.

§Safety

This type must only be implemented on types known to be repr equivalent to their Repr type.

Required Associated Types§

Source

type Repr

The singular concrete type that all generic variants can be transmuted on.

For reference types this deliberately carries the borrow lifetime (rather than erasing it to 'static). The lifetime-faithful repr is what makes Upcast::upcast and upcast_into sound: the Repr-equality bound then rejects upcasts that would launder a short-lived borrow into a longer one. The 'static erasure that the JS ABI boundary relies on (where borrows are only ever call-scoped) is instead performed explicitly via an unsafe cast in codegen.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl ErasableGeneric for ()

Source§

impl ErasableGeneric for bool

Source§

impl ErasableGeneric for char

Source§

impl ErasableGeneric for f32

Source§

impl ErasableGeneric for i8

Source§

impl ErasableGeneric for i16

Source§

impl ErasableGeneric for i32

Source§

impl ErasableGeneric for isize

Source§

impl ErasableGeneric for u8

Source§

impl ErasableGeneric for u16

Source§

impl ErasableGeneric for u32

Source§

impl ErasableGeneric for usize

Source§

impl<'a, A, B, C, D, E, F, G, H, R> ErasableGeneric for &'a (dyn Fn(A, B, C, D, E, F, G, H) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, F, G, H, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C, D, E, F, G, H) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, F, G, R> ErasableGeneric for &'a (dyn Fn(A, B, C, D, E, F, G) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, F, G, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C, D, E, F, G) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, F, R> ErasableGeneric for &'a (dyn Fn(A, B, C, D, E, F) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, F, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C, D, E, F) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, R> ErasableGeneric for &'a (dyn Fn(A, B, C, D, E) -> R + 'a)

Source§

impl<'a, A, B, C, D, E, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C, D, E) -> R + 'a)

Source§

impl<'a, A, B, C, D, R> ErasableGeneric for &'a (dyn Fn(A, B, C, D) -> R + 'a)

Source§

type Repr = &'a dyn Fn(<A as ErasableGeneric>::Repr, <B as ErasableGeneric>::Repr, <C as ErasableGeneric>::Repr, <D as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, B, C, D, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C, D) -> R + 'a)

Source§

impl<'a, A, B, C, R> ErasableGeneric for &'a (dyn Fn(A, B, C) -> R + 'a)

Source§

type Repr = &'a dyn Fn(<A as ErasableGeneric>::Repr, <B as ErasableGeneric>::Repr, <C as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, B, C, R> ErasableGeneric for &'a mut (dyn FnMut(A, B, C) -> R + 'a)

Source§

type Repr = &'a dyn FnMut(<A as ErasableGeneric>::Repr, <B as ErasableGeneric>::Repr, <C as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, B, R> ErasableGeneric for &'a (dyn Fn(A, B) -> R + 'a)

Source§

type Repr = &'a dyn Fn(<A as ErasableGeneric>::Repr, <B as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, B, R> ErasableGeneric for &'a mut (dyn FnMut(A, B) -> R + 'a)

Source§

type Repr = &'a dyn FnMut(<A as ErasableGeneric>::Repr, <B as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, R> ErasableGeneric for &'a (dyn Fn(&A) -> R + 'a)

Source§

type Repr = &'a dyn Fn(<A as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, R> ErasableGeneric for &'a (dyn Fn(A) -> R + 'a)

Source§

type Repr = &'a dyn Fn(<A as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, R> ErasableGeneric for &'a mut (dyn FnMut(&A) -> R + 'a)

Source§

type Repr = &'a dyn FnMut(<A as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, A, R> ErasableGeneric for &'a mut (dyn FnMut(A) -> R + 'a)

Source§

type Repr = &'a dyn FnMut(<A as ErasableGeneric>::Repr) -> <R as ErasableGeneric>::Repr

Source§

impl<'a, R> ErasableGeneric for &'a (dyn Fn() -> R + 'a)
where R: ErasableGeneric,

Source§

type Repr = &'a dyn Fn() -> <R as ErasableGeneric>::Repr

Source§

impl<'a, R> ErasableGeneric for &'a mut (dyn FnMut() -> R + 'a)
where R: ErasableGeneric,

Source§

type Repr = &'a dyn FnMut() -> <R as ErasableGeneric>::Repr

Source§

impl<'a, T: ErasableGeneric> ErasableGeneric for &'a [T]
where <T as ErasableGeneric>::Repr: 'a,

Source§

type Repr = &'a [<T as ErasableGeneric>::Repr]

Source§

impl<'a> ErasableGeneric for &'a str

Source§

type Repr = &'a str

Source§

impl<'b, T: ErasableGeneric> ErasableGeneric for &'b T
where <T as ErasableGeneric>::Repr: 'b,

Source§

type Repr = &'b <T as ErasableGeneric>::Repr

Source§

impl<'b, T: ErasableGeneric> ErasableGeneric for &'b mut T
where <T as ErasableGeneric>::Repr: 'b,

Source§

type Repr = &'b mut <T as ErasableGeneric>::Repr

Source§

impl<T: ErasableGeneric, E: ErasableGeneric> ErasableGeneric for Result<T, E>

Source§

impl<T: ErasableGeneric> ErasableGeneric for *const T

Source§

impl<T: ErasableGeneric> ErasableGeneric for Box<[T]>

Source§

impl<T: ErasableGeneric> ErasableGeneric for Option<T>

Source§

impl<T: ErasableGeneric> ErasableGeneric for Vec<T>

Implementors§