diff options
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 2a0891d9..8c113f5a 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -2645,15 +2645,28 @@ impl CodeGenerator for Enum { }; let existing_variant_name = entry.get(); - add_constant( - ctx, - enum_ty, - &ident, - &*mangled_name, - existing_variant_name, - enum_rust_ty.clone(), - result, - ); + // Use associated constants for named enums. + if enum_ty.name().is_some() && + ctx.options().rust_features().associated_const { + let enum_canonical_name = &ident; + let variant_name = ctx.rust_ident_raw(&*mangled_name); + result.push(quote! { + impl #enum_rust_ty { + pub const #variant_name : #enum_rust_ty = + #enum_canonical_name :: #existing_variant_name ; + } + }); + } else { + add_constant( + ctx, + enum_ty, + &ident, + &*mangled_name, + existing_variant_name, + enum_rust_ty.clone(), + result, + ); + } } else { builder = builder.with_variant( ctx, |