From 7e781925e1cdf9067cde61fcfdeaf912daaa6c31 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Tue, 17 Jan 2023 08:43:58 +0100 Subject: [PATCH] Allow storing V with #[derive(Enum)] enum-map reserves __EnumMapInternalV for this purpose. This is not a part of stable API, and it's only necessary due to not having stable def_site hygiene. --- enum-map-derive/src/derive_enum.rs | 2 +- enum-map-derive/src/derive_struct.rs | 2 +- enum-map/tests/test.rs | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/enum-map-derive/src/derive_enum.rs b/enum-map-derive/src/derive_enum.rs index be49fc1..40cf5ae 100644 --- a/enum-map-derive/src/derive_enum.rs +++ b/enum-map-derive/src/derive_enum.rs @@ -37,7 +37,7 @@ impl EnumGenerator { quote! { #[automatically_derived] impl ::enum_map::Enum for #name { - type Array = [V; #length]; + type Array<__EnumMapInternalV> = [__EnumMapInternalV; #length]; #[inline] fn from_usize(value: ::enum_map::usize) -> Self { diff --git a/enum-map-derive/src/derive_struct.rs b/enum-map-derive/src/derive_struct.rs index fc13a7a..85468e6 100644 --- a/enum-map-derive/src/derive_struct.rs +++ b/enum-map-derive/src/derive_struct.rs @@ -102,7 +102,7 @@ impl StructGenerator { quote! { #[automatically_derived] impl ::enum_map::Enum for #name { - type Array = [V; #length]; + type Array<__EnumMapInternalV> = [__EnumMapInternalV; #length]; #[inline] fn from_usize(value: ::enum_map::usize) -> Self { diff --git a/enum-map/tests/test.rs b/enum-map/tests/test.rs index 6e3e5eb..b1d85b5 100644 --- a/enum-map/tests/test.rs +++ b/enum-map/tests/test.rs @@ -639,3 +639,12 @@ fn usize_override() { B, } } + +#[derive(Enum)] +enum V { + V, +} +#[derive(Enum)] +struct StructureCanHoldV { + v: V, +}