enum InheritedRefMatchRule {
EatOuter,
EatInner,
EatBoth {
consider_inherited_ref: bool,
},
}Expand description
Variations on RFC 3627’s Rule 4: when do reference patterns match against inherited references?
“Inherited reference” designates the &/&mut types that arise from using match ergonomics, i.e.
from matching a reference type with a non-reference pattern. E.g. when Some(x) matches on
&mut Option<&T>, x gets type &mut &T and the outer &mut is considered “inherited”.
Variants§
EatOuter
Reference patterns consume only the inherited reference if possible, regardless of whether the underlying type being matched against is a reference type. If there is no inherited reference, a reference will be consumed from the underlying type.
EatInner
Reference patterns consume only a reference from the underlying type if possible. If the underlying type is not a reference type, the inherited reference will be consumed.
EatBoth
When the underlying type is a reference type, reference patterns consume both layers of reference, i.e. they both reset the binding mode and consume the reference type.
Fields
consider_inherited_ref: boolIf true, an inherited reference will be considered when determining whether a reference
pattern matches a given type:
- If the underlying type is not a reference, a reference pattern may eat the inherited reference;
- If the underlying type is a reference, a reference pattern matches if it can eat either one
of the underlying and inherited references. E.g. a
&mutpattern is allowed if either the underlying type is&mutor the inherited reference is&mut.
If false, a reference pattern is only matched against the underlying type.
This is false for stable Rust and true for both the ref_pat_eat_one_layer_2024 and
ref_pat_eat_one_layer_2024_structural feature gates.
Trait Implementations§
Source§impl Clone for InheritedRefMatchRule
impl Clone for InheritedRefMatchRule
Source§fn clone(&self) -> InheritedRefMatchRule
fn clone(&self) -> InheritedRefMatchRule
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for InheritedRefMatchRule
impl Debug for InheritedRefMatchRule
Source§impl PartialEq for InheritedRefMatchRule
impl PartialEq for InheritedRefMatchRule
impl Copy for InheritedRefMatchRule
impl Eq for InheritedRefMatchRule
impl StructuralPartialEq for InheritedRefMatchRule
Auto Trait Implementations§
impl DynSend for InheritedRefMatchRule
impl DynSync for InheritedRefMatchRule
impl Freeze for InheritedRefMatchRule
impl RefUnwindSafe for InheritedRefMatchRule
impl Send for InheritedRefMatchRule
impl Sync for InheritedRefMatchRule
impl Unpin for InheritedRefMatchRule
impl UnwindSafe for InheritedRefMatchRule
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
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§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§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<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> 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<T> ErasedDestructor for Twhere
T: 'static,
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: 1 byte
Size for each variant:
EatOuter: 0 bytesEatInner: 0 bytesEatBoth: 1 byte