@@ -1875,7 +1875,7 @@ pub enum Variants<FieldIdx: Idx, VariantIdx: Idx> {
18751875 tag : Scalar ,
18761876 tag_encoding : TagEncoding < VariantIdx > ,
18771877 tag_field : FieldIdx ,
1878- variants : IndexVec < VariantIdx , LayoutData < FieldIdx , VariantIdx > > ,
1878+ variants : IndexVec < VariantIdx , VariantLayout < FieldIdx , VariantIdx > > ,
18791879 } ,
18801880}
18811881
@@ -2230,3 +2230,40 @@ pub enum AbiFromStrErr {
22302230 /// no "-unwind" variant can be used here
22312231 NoExplicitUnwind ,
22322232}
2233+
2234+ // NOTE: This struct is generic over the FieldIdx and VariantIdx for rust-analyzer usage.
2235+ #[ derive( PartialEq , Eq , Hash , Clone , Debug ) ]
2236+ #[ cfg_attr( feature = "nightly" , derive( HashStable_Generic ) ) ]
2237+ pub struct VariantLayout < FieldIdx : Idx , VariantIdx : Idx > {
2238+ pub size : Size ,
2239+ pub align : AbiAlign ,
2240+ pub backend_repr : BackendRepr ,
2241+ pub fields : FieldsShape < FieldIdx > ,
2242+ largest_niche : Option < Niche > ,
2243+ uninhabited : bool ,
2244+ pub variants : Variants < FieldIdx , VariantIdx > ,
2245+ max_repr_align : Option < Align > ,
2246+ unadjusted_abi_align : Align ,
2247+ randomization_seed : Hash64 ,
2248+ }
2249+
2250+ impl < FieldIdx : Idx , VariantIdx : Idx > VariantLayout < FieldIdx , VariantIdx > {
2251+ pub fn from_layout ( layout : LayoutData < FieldIdx , VariantIdx > ) -> Self {
2252+ Self {
2253+ size : layout. size ,
2254+ align : layout. align ,
2255+ backend_repr : layout. backend_repr ,
2256+ fields : layout. fields ,
2257+ largest_niche : layout. largest_niche ,
2258+ uninhabited : layout. uninhabited ,
2259+ variants : layout. variants ,
2260+ max_repr_align : layout. max_repr_align ,
2261+ unadjusted_abi_align : layout. unadjusted_abi_align ,
2262+ randomization_seed : layout. randomization_seed ,
2263+ }
2264+ }
2265+
2266+ pub fn is_uninhabited ( & self ) -> bool {
2267+ self . uninhabited
2268+ }
2269+ }
0 commit comments