Enum rustc_middle::ty::TyKind[][src]

pub enum TyKind<'tcx> {
Show variants Bool, Char, Int(IntTy), Uint(UintTy), Float(FloatTy), Adt(&'tcx AdtDefSubstsRef<'tcx>), Foreign(DefId), Str, Array(Ty<'tcx>, &'tcx Const<'tcx>), Slice(Ty<'tcx>), RawPtr(TypeAndMut<'tcx>), Ref(Region<'tcx>, Ty<'tcx>, Mutability), FnDef(DefIdSubstsRef<'tcx>), FnPtr(PolyFnSig<'tcx>), Dynamic(&'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>, Region<'tcx>), Closure(DefIdSubstsRef<'tcx>), Generator(DefIdSubstsRef<'tcx>, Movability), GeneratorWitness(Binder<'tcx, &'tcx List<Ty<'tcx>>>), Never, Tuple(SubstsRef<'tcx>), Projection(ProjectionTy<'tcx>), Opaque(DefIdSubstsRef<'tcx>), Param(ParamTy), Bound(DebruijnIndexBoundTy), Placeholder(PlaceholderType), Infer(InferTy), Error(DelaySpanBugEmitted),

Defines the kinds of types.

N.B., if you change this, you’ll probably want to change the corresponding AST structure in rustc_ast/src/ast.rs as well.



The primitive boolean type. Written as bool.


The primitive character type; holds a Unicode scalar value (a non-surrogate code point). Written as char.


A primitive signed integer type. For example, i32.


A primitive unsigned integer type. For example, u32.


A primitive floating-point type. For example, f64.

Adt(&'tcx AdtDefSubstsRef<'tcx>)

Algebraic data types (ADT). For example: structures, enumerations and unions.

InternalSubsts here, possibly against intuition, may contain Params. That is, even after substitution it is possible that there are type variables. This happens when the Adt corresponds to an ADT definition and not a concrete use of it.


An unsized FFI type that is opaque to Rust. Written as extern type T.


The pointee of a string slice. Written as str.

Array(Ty<'tcx>, &'tcx Const<'tcx>)

An array with the given length. Written as [T; n].


The pointee of an array slice. Written as [T].


A raw pointer. Written as *mut T or *const T

Ref(Region<'tcx>, Ty<'tcx>, Mutability)

A reference; a pointer with an associated lifetime. Written as &'a mut T or &'a T.


The anonymous type of a function declaration/definition. Each function has a unique type, which is output (for a function named foo returning an i32) as fn() -> i32 {foo}.

For example the type of bar here:

fn foo() -> i32 { 1 }
let bar = foo; // bar: fn() -> i32 {foo}

A pointer to a function. Written as fn() -> i32.

For example the type of bar here:

fn foo() -> i32 { 1 }
let bar: fn() -> i32 = foo;
Dynamic(&'tcx List<Binder<'tcx, ExistentialPredicate<'tcx>>>, Region<'tcx>)

A trait object. Written as dyn for<'b> Trait<'b, Assoc = u32> + Send + 'a.


The anonymous type of a closure. Used to represent the type of |a| a.

Generator(DefIdSubstsRef<'tcx>, Movability)

The anonymous type of a generator. Used to represent the type of |a| yield a.

GeneratorWitness(Binder<'tcx, &'tcx List<Ty<'tcx>>>)

A type representing the types stored inside a generator. This should only appear in GeneratorInteriors.


The never type !.


A tuple type. For example, (i32, bool). Use TyS::tuple_fields to iterate over the field types.


The projection of an associated type. For example, <T as Trait<..>>::N.


Opaque (impl Trait) type found in a return type. The DefId comes either from


A type parameter; for example, T in fn f<T>(x: T) {}.


Bound type variable, used only when preparing a trait query.


A placeholder type - universally quantified higher-ranked type.


A type variable used during type checking.


A placeholder for a type which could not be computed; this is propagated to avoid useless error messages.


impl<'tcx> TyKind<'tcx>[src]

pub fn is_primitive(&self) -> bool[src]

pub fn article(&self) -> &'static str[src]

Get the article (“a” or “an”) to use with this type.

Trait Implementations

impl<'tcx> Borrow<TyKind<'tcx>> for Interned<'tcx, TyS<'tcx>>[src]

impl<'tcx> Clone for TyKind<'tcx>[src]

impl<'tcx> Debug for TyKind<'tcx>[src]

impl<'tcx, __D: TyDecoder<'tcx>> Decodable<__D> for TyKind<'tcx>[src]

impl<'tcx, __E: TyEncoder<'tcx>> Encodable<__E> for TyKind<'tcx>[src]

impl<'tcx> Eq for TyKind<'tcx>[src]

impl<'tcx> Hash for TyKind<'tcx>[src]

impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for TyKind<'tcx>[src]

impl<'tcx> Ord for TyKind<'tcx>[src]

impl<'tcx> PartialEq<TyKind<'tcx>> for TyKind<'tcx>[src]

impl<'tcx> PartialOrd<TyKind<'tcx>> for TyKind<'tcx>[src]

impl<'tcx> StructuralEq for TyKind<'tcx>[src]

impl<'tcx> StructuralPartialEq for TyKind<'tcx>[src]

Auto Trait Implementations

impl<'tcx> !RefUnwindSafe for TyKind<'tcx>

impl<'tcx> !Send for TyKind<'tcx>

impl<'tcx> !Sync for TyKind<'tcx>

impl<'tcx> Unpin for TyKind<'tcx>

impl<'tcx> !UnwindSafe for TyKind<'tcx>

Blanket Implementations

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

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

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

impl<'a, T> Captures<'a> for T where
    T: ?Sized

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 

impl<T> MaybeResult<T> for T[src]

type Error = !

impl<T> ToOwned for T where
    T: Clone

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]