pub enum CanonicalizeMode {
Input,
Response {
max_input_universe: UniverseIndex,
},
}
Expand description
Whether we’re canonicalizing a query input or the query response.
When canonicalizing an input we’re in the context of the caller while canonicalizing the response happens in the context of the query.
Variants§
Input
Response
FIXME: We currently return region constraints referring to placeholders and inference variables from a binder instantiated inside of the query.
In the long term we should eagerly deal with these constraints inside of the query and only propagate constraints which are actually nameable by the caller.
Fields
max_input_universe: UniverseIndex
The highest universe nameable by the caller.
All variables in a universe nameable by the caller get mapped to the root universe in the response and then mapped back to their correct universe when applying the query response in the context of the caller.
This doesn’t work for universes created inside of the query so we do remember their universe in the response.
Trait Implementations§
source§impl Clone for CanonicalizeMode
impl Clone for CanonicalizeMode
source§fn clone(&self) -> CanonicalizeMode
fn clone(&self) -> CanonicalizeMode
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for CanonicalizeMode
impl Debug for CanonicalizeMode
impl Copy for CanonicalizeMode
Auto Trait Implementations§
impl Freeze for CanonicalizeMode
impl RefUnwindSafe for CanonicalizeMode
impl Send for CanonicalizeMode
impl Sync for CanonicalizeMode
impl Unpin for CanonicalizeMode
impl UnwindSafe for CanonicalizeMode
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
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: 4 bytes
Size for each variant:
Input
: 0 bytesResponse
: 4 bytes