pub enum TyKind<'hir> {
Show 17 variants
InferDelegation(DefId, InferDelegationKind),
Slice(&'hir Ty<'hir>),
Array(&'hir Ty<'hir>, &'hir ConstArg<'hir>),
Ptr(MutTy<'hir>),
Ref(&'hir Lifetime, MutTy<'hir>),
BareFn(&'hir BareFnTy<'hir>),
UnsafeBinder(&'hir UnsafeBinderTy<'hir>),
Never,
Tup(&'hir [Ty<'hir>]),
Path(QPath<'hir>),
OpaqueDef(&'hir OpaqueTy<'hir>),
TraitAscription(GenericBounds<'hir>),
TraitObject(&'hir [PolyTraitRef<'hir>], &'hir Lifetime, TraitObjectSyntax),
Typeof(&'hir AnonConst),
Infer,
Err(ErrorGuaranteed),
Pat(&'hir Ty<'hir>, &'hir Pat<'hir>),
}
Expand description
The various kinds of types recognized by the compiler.
Variants§
InferDelegation(DefId, InferDelegationKind)
Actual type should be inherited from DefId
signature
Slice(&'hir Ty<'hir>)
A variable length slice (i.e., [T]
).
Array(&'hir Ty<'hir>, &'hir ConstArg<'hir>)
A fixed length array (i.e., [T; n]
).
Ptr(MutTy<'hir>)
A raw pointer (i.e., *const T
or *mut T
).
Ref(&'hir Lifetime, MutTy<'hir>)
A reference (i.e., &'a T
or &'a mut T
).
BareFn(&'hir BareFnTy<'hir>)
A bare function (e.g., fn(usize) -> bool
).
UnsafeBinder(&'hir UnsafeBinderTy<'hir>)
An unsafe binder type (e.g. unsafe<'a> Foo<'a>
).
Never
The never type (!
).
Tup(&'hir [Ty<'hir>])
A tuple ((A, B, C, D, ...)
).
Path(QPath<'hir>)
A path to a type definition (module::module::...::Type
), or an
associated type (e.g., <Vec<T> as Trait>::Type
or <T>::Target
).
Type parameters may be stored in each PathSegment
.
OpaqueDef(&'hir OpaqueTy<'hir>)
An opaque type definition itself. This is only used for impl Trait
.
TraitAscription(GenericBounds<'hir>)
A trait ascription type, which is impl Trait
within a local binding.
TraitObject(&'hir [PolyTraitRef<'hir>], &'hir Lifetime, TraitObjectSyntax)
A trait object type Bound1 + Bound2 + Bound3
where Bound
is a trait or a lifetime.
Typeof(&'hir AnonConst)
Unused for now.
Infer
TyKind::Infer
means the type should be inferred instead of it having been
specified. This can appear anywhere in a type.
Note: Not all inferred types are represented as
TyKind::Infer
. In cases where it is ambiguous whether
a generic arg is a type or a const, inference variables are
represented as GenericArg::Infer
instead.
Err(ErrorGuaranteed)
Placeholder for a type that has failed to be defined.
Pat(&'hir Ty<'hir>, &'hir Pat<'hir>)
Pattern types (pattern_type!(u32 is 1..)
)
Trait Implementations§
Source§impl<'hir, __CTX> HashStable<__CTX> for TyKind<'hir>where
__CTX: HashStableContext,
impl<'hir, __CTX> HashStable<__CTX> for TyKind<'hir>where
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl<'hir> Copy for TyKind<'hir>
Auto Trait Implementations§
impl<'hir> DynSend for TyKind<'hir>
impl<'hir> DynSync for TyKind<'hir>
impl<'hir> Freeze for TyKind<'hir>
impl<'hir> RefUnwindSafe for TyKind<'hir>
impl<'hir> Send for TyKind<'hir>
impl<'hir> Sync for TyKind<'hir>
impl<'hir> Unpin for TyKind<'hir>
impl<'hir> UnwindSafe for TyKind<'hir>
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<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> 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<T> Pointable for T
impl<T> Pointable for 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: 32 bytes
Size for each variant:
InferDelegation
: 31 bytesSlice
: 15 bytesArray
: 23 bytesPtr
: 23 bytesRef
: 31 bytesBareFn
: 15 bytesUnsafeBinder
: 15 bytesNever
: 0 bytesTup
: 23 bytesPath
: 31 bytesOpaqueDef
: 15 bytesTraitAscription
: 23 bytesTraitObject
: 31 bytesTypeof
: 15 bytesInfer
: 0 bytesErr
: 0 bytesPat
: 23 bytes