@@ -1974,7 +1974,7 @@ pub enum Variants<FieldIdx: Idx, VariantIdx: Idx> {
19741974 tag : Scalar ,
19751975 tag_encoding : TagEncoding < VariantIdx > ,
19761976 tag_field : FieldIdx ,
1977- variants : IndexVec < VariantIdx , LayoutData < FieldIdx , VariantIdx > > ,
1977+ variants : IndexVec < VariantIdx , VariantLayout < FieldIdx , VariantIdx > > ,
19781978 } ,
19791979}
19801980
@@ -2339,3 +2339,40 @@ pub enum AbiFromStrErr {
23392339 /// no "-unwind" variant can be used here
23402340 NoExplicitUnwind ,
23412341}
2342+
2343+ // NOTE: This struct is generic over the FieldIdx and VariantIdx for rust-analyzer usage.
2344+ #[ derive( PartialEq , Eq , Hash , Clone , Debug ) ]
2345+ #[ cfg_attr( feature = "nightly" , derive( HashStable_Generic ) ) ]
2346+ pub struct VariantLayout < FieldIdx : Idx , VariantIdx : Idx > {
2347+ pub size : Size ,
2348+ pub align : AbiAlign ,
2349+ pub backend_repr : BackendRepr ,
2350+ pub fields : FieldsShape < FieldIdx > ,
2351+ largest_niche : Option < Niche > ,
2352+ uninhabited : bool ,
2353+ pub variants : Variants < FieldIdx , VariantIdx > ,
2354+ max_repr_align : Option < Align > ,
2355+ unadjusted_abi_align : Align ,
2356+ randomization_seed : Hash64 ,
2357+ }
2358+
2359+ impl < FieldIdx : Idx , VariantIdx : Idx > VariantLayout < FieldIdx , VariantIdx > {
2360+ pub fn from_layout ( layout : LayoutData < FieldIdx , VariantIdx > ) -> Self {
2361+ Self {
2362+ size : layout. size ,
2363+ align : layout. align ,
2364+ backend_repr : layout. backend_repr ,
2365+ fields : layout. fields ,
2366+ largest_niche : layout. largest_niche ,
2367+ uninhabited : layout. uninhabited ,
2368+ variants : layout. variants ,
2369+ max_repr_align : layout. max_repr_align ,
2370+ unadjusted_abi_align : layout. unadjusted_abi_align ,
2371+ randomization_seed : layout. randomization_seed ,
2372+ }
2373+ }
2374+
2375+ pub fn is_uninhabited ( & self ) -> bool {
2376+ self . uninhabited
2377+ }
2378+ }
0 commit comments