Skip to main content

ErasureType

Enum ErasureType 

Source
pub enum ErasureType {
    SelfType,
    SelfRef,
    SelfRefMut,
    SelfAssoc {
        assoc_name: String,
        bound_trait_id: Option<u32>,
    },
    Generic {
        name: String,
        args: Vec<ErasureType>,
    },
    Reference {
        mutable: bool,
        inner: Box<ErasureType>,
    },
    MethodGeneric {
        name: String,
    },
    Concrete {
        type_token: u32,
    },
}
Expand description

Storage-tier projection of the method-signature types Erase_T operates on. Mirrors the row table in ADR-006 §2.7.24 Q25.C.1:

Input τErase_T(τ)
Selfdyn T
&Self / &mut Self&dyn T / &mut dyn T
Self::A w/ bounddyn Bound
Self::A w/o boundETO-001 compile error
G<τ₁, ...> w/ erasure-safe Grecurse
method-generic GKindedSlot + TypeInfo
concrete / builtinunchanged

Variants§

§

SelfType

Self — boxes into dyn T (the trait being erased).

§

SelfRef

&Self (immutable) — boxes into &dyn T.

§

SelfRefMut

&mut Self — boxes into &mut dyn T.

§

SelfAssoc

Self::A — projection of a Self-associated type. If bound_trait_id is Some, the assoc type’s bound trait id (the type erases to dyn Bound); if None, this is an ETO-001 compile error (associated type without a trait bound cannot be erased).

Fields

§assoc_name: String
§bound_trait_id: Option<u32>
§

Generic

An erasure-safe generic constructor (Option/Result/Vec/Box/Arc/ HashMap/HashSet/tuple/user-#[erasure_safe]) with type-argument list to recurse into. name is the constructor’s user-visible name; the emission tier maps this back to its own Type ctor.

Fields

§name: String
§

Reference

&G<...> / &mut G<...> — reference to a generic. Reference itself is not auto-boxed; recurses into the payload.

Fields

§mutable: bool
§

MethodGeneric

Method-generic parameter (fn foo<G: Bound>(...)). At dispatch time the call site supplies a KindedSlot payload + a &TypeInfo per generic — see §Q25.C.3.

Fields

§name: String
§

Concrete

A concrete or builtin type (int, string, user-defined struct, closure type, etc.). Carries an opaque token so the emission tier can map back to its richer representation. Erase_T leaves these unchanged.

Fields

§type_token: u32

Implementations§

Source§

impl ErasureType

Source

pub fn rewrite(&self, trait_id: u32) -> Result<RewriteResult, ErasureError>

Apply the Erase_T(τ) substitution per ADR-006 §2.7.24 Q25.C.1. Returns the rewritten type, plus a wrap_targets accumulator describing every Self / Self::A site reached (used by the emission tier to populate VTableEntry::BoxedReturn::wrap_targets).

The trait_id argument is the surrounding trait’s id — used for Selfdyn T (T being the surrounding trait) and as the fallback wrap_as_trait_id for assoc-type erasures.

Returns Err with the ETO error code on unbounded Self::A per §Q25.C.1 row 5.

Trait Implementations§

Source§

impl Clone for ErasureType

Source§

fn clone(&self) -> ErasureType

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ErasureType

Source§

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

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

impl PartialEq for ErasureType

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for ErasureType

Source§

impl StructuralPartialEq for ErasureType

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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 T
where 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 T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,