pub struct TypeDecl {
pub def_id: TypeDeclId,
pub item_meta: ItemMeta,
pub generics: GenericParams,
pub src: ItemSource,
pub kind: TypeDeclKind,
pub layout: Option<Layout>,
pub ptr_metadata: PtrMetadata,
pub repr: Option<ReprOptions>,
}Expand description
A type declaration.
Types can be opaque or transparent.
Transparent types are local types not marked as opaque. Opaque types are the others: local types marked as opaque, and non-local types (coming from external dependencies).
In case the type is transparent, the declaration also contains the type definition (see TypeDeclKind).
A type can only be an ADT (structure or enumeration), as type aliases are inlined in MIR.
Fields§
§def_id: TypeDeclId§item_meta: ItemMetaMeta information associated with the item.
generics: GenericParams§src: ItemSourceThe context of the type: distinguishes top-level items from closure-related items.
kind: TypeDeclKindThe type kind: enum, struct, or opaque.
layout: Option<Layout>The layout of the type. Information may be partial because of generics or dynamically-
sized types. If rustc cannot compute a layout, it is None.
ptr_metadata: PtrMetadataThe metadata associated with a pointer to the type.
repr: Option<ReprOptions>The representation options of this type declaration as annotated by the user.
Is None for foreign type declarations.
Implementations§
Source§impl TypeDecl
impl TypeDecl
Sourcepub fn get_variant_from_tag(&self, tag: ScalarValue) -> Option<VariantId>
pub fn get_variant_from_tag(&self, tag: ScalarValue) -> Option<VariantId>
Looks up the variant corresponding to the tag (i.e. the in-memory bytes that represent the discriminant).
Returns None for types that don’t have a relevant discriminant (e.g. uninhabited types).
If the tag does not correspond to any valid discriminant but there is a niche,
the resulting VariantId will be for the untagged variant TagEncoding::Niche::untagged_variant.
pub fn is_c_repr(&self) -> bool
pub fn get_field_by_name( &self, variant: Option<VariantId>, field_name: &str, ) -> Option<(FieldId, &Field)>
Trait Implementations§
Source§impl AstVisitable for TypeDecl
impl AstVisitable for TypeDecl
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
self, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
self, in pre-order traversal.Source§impl<'de> Deserialize<'de> for TypeDecl
impl<'de> Deserialize<'de> for TypeDecl
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for TypeDeclwhere
V: Visitor + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, ItemSource> + Visit<'s, TypeDeclKind> + Visit<'s, Option<Layout>> + Visit<'s, PtrMetadata>,
impl<'s, V> Drive<'s, V> for TypeDeclwhere
V: Visitor + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, ItemSource> + Visit<'s, TypeDeclKind> + Visit<'s, Option<Layout>> + Visit<'s, PtrMetadata>,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveMut<'s, V> for TypeDeclwhere
V: Visitor + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, ItemSource> + VisitMut<'s, TypeDeclKind> + VisitMut<'s, Option<Layout>> + VisitMut<'s, PtrMetadata>,
impl<'s, V> DriveMut<'s, V> for TypeDeclwhere
V: Visitor + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, ItemSource> + VisitMut<'s, TypeDeclKind> + VisitMut<'s, Option<Layout>> + VisitMut<'s, PtrMetadata>,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<C: AstFormatter> FmtWithCtx<C> for TypeDecl
impl<C: AstFormatter> FmtWithCtx<C> for TypeDecl
Auto Trait Implementations§
impl Freeze for TypeDecl
impl RefUnwindSafe for TypeDecl
impl Send for TypeDecl
impl Sync for TypeDecl
impl Unpin for TypeDecl
impl UnwindSafe for TypeDecl
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,
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen De Bruijn indices
will count from the outside of self.Source§fn substitute(self, generics: &GenericArgs) -> Self
fn substitute(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
Note: if self is an item that comes from a TraitDecl, you most likely want to use
substitute_with_self.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
fn substitute_explicits(self, generics: &GenericArgs) -> Self
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
TraitRefKind::Self trait ref.Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth binders. Returns None if it contains a variable bound in
one of these depth binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen indices will count
from the outside of self.