struct DiagnosticBuilderInner<'a> {
    state: DiagnosticBuilderState<'a>,
    diagnostic: Box<Diagnostic>,
}
Expand description

This type exists only for DiagnosticBuilder::forget_guarantee, because it:

  1. lacks the G parameter and therefore DiagnosticBuilder<G1> can be converted into DiagnosticBuilder<G2> while reusing the inner field
  2. can implement the Drop “bomb” instead of DiagnosticBuilder, as it contains all of the data (state + diagnostic) of DiagnosticBuilder

The diagnostic field is not Copy and can’t be moved out of whichever type implements the Drop “bomb”, but because of the above two facts, that never needs to happen - instead, the whole inner: DiagnosticBuilderInner can be moved out of a DiagnosticBuilder and into another.

Fields§

§state: DiagnosticBuilderState<'a>§diagnostic: Box<Diagnostic>

Diagnostic is a large type, and DiagnosticBuilder is often used as a return value, especially within the frequently-used PResult type. In theory, return value optimization (RVO) should avoid unnecessary copying. In practice, it does not (at the time of writing).

Trait Implementations§

source§

impl<'a> Clone for DiagnosticBuilderInner<'a>

source§

fn clone(&self) -> DiagnosticBuilderInner<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Drop for DiagnosticBuilderInner<'_>

Destructor bomb - a DiagnosticBuilder must be either emitted or cancelled or we emit a bug.

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 16 bytes