pub enum TyKind<'hir> {
Show 13 variants
Slice(&'hir Ty<'hir>),
Array(&'hir Ty<'hir>, ArrayLen),
Ptr(MutTy<'hir>),
Ref(&'hir Lifetime, MutTy<'hir>),
BareFn(&'hir BareFnTy<'hir>),
Never,
Tup(&'hir [Ty<'hir>]),
Path(QPath<'hir>),
OpaqueDef(ItemId, &'hir [GenericArg<'hir>], bool),
TraitObject(&'hir [PolyTraitRef<'hir>], &'hir Lifetime, TraitObjectSyntax),
Typeof(AnonConst),
Infer,
Err(ErrorGuaranteed),
}
Expand description
The various kinds of types recognized by the compiler.
Variants§
Slice(&'hir Ty<'hir>)
A variable length slice (i.e., [T]
).
Array(&'hir Ty<'hir>, ArrayLen)
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
).
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(ItemId, &'hir [GenericArg<'hir>], bool)
An opaque type definition itself. This is only used for impl Trait
.
The generic argument list contains the lifetimes (and in the future
possibly parameters) that are actually bound on the impl Trait
.
The last parameter specifies whether this opaque appears in a trait definition.
TraitObject(&'hir [PolyTraitRef<'hir>], &'hir Lifetime, TraitObjectSyntax)
A trait object type Bound1 + Bound2 + Bound3
where Bound
is a trait or a lifetime.
Typeof(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.
Err(ErrorGuaranteed)
Placeholder for a type that has failed to be defined.
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> 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<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = T> ) -> &'a 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
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:
Slice
: 15 bytesArray
: 31 bytesPtr
: 23 bytesRef
: 31 bytesBareFn
: 15 bytesNever
: 0 bytesTup
: 23 bytesPath
: 31 bytesOpaqueDef
: 23 bytesTraitObject
: 31 bytesTypeof
: 23 bytesInfer
: 0 bytesErr
: 0 bytes