pub struct BoxedDst<T: ?Sized> { /* private fields */ }
Expand description

A helper type to create boxed DST, i.e., tags with a dynamic size for the builder. This is tricky in Rust. This type behaves similar to the regular Box type except that it ensure the same layout is used for the (explicit) allocation and the (implicit) deallocation of memory. Otherwise, I didn’t found any way to figure out the right layout for a DST. Miri always reported issues that the deallocation used a wrong layout.

Technically, I’m certain this code is memory safe. But with this type, I also can convince miri that it is.

Trait Implementations§

source§

impl<T: Debug + ?Sized> Debug for BoxedDst<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: ?Sized> Deref for BoxedDst<T>

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<T: ?Sized> Drop for BoxedDst<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: ?Sized + PartialEq> PartialEq<BoxedDst<T>> for BoxedDst<T>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: Eq + ?Sized> Eq for BoxedDst<T>

source§

impl<T: ?Sized> StructuralEq for BoxedDst<T>

Auto Trait Implementations§

§

impl<T: ?Sized> RefUnwindSafe for BoxedDst<T>where T: RefUnwindSafe,

§

impl<T> !Send for BoxedDst<T>

§

impl<T> !Sync for BoxedDst<T>

§

impl<T: ?Sized> Unpin for BoxedDst<T>where T: Unpin,

§

impl<T: ?Sized> UnwindSafe for BoxedDst<T>where T: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.