Skip to content

Commit a8a06c8

Browse files
committed
Improve snapshot tests of Encapsulate derive macro
1 parent eefeb66 commit a8a06c8

File tree

7 files changed

+1082
-84
lines changed

7 files changed

+1082
-84
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use enumcapsulate::{
2-
AsVariant, AsVariantMut, AsVariantRef, Encapsulate, FromVariant, IntoVariant,
3-
};
1+
use enumcapsulate::Encapsulate;
42
pub struct VariantA;
53
#[automatically_derived]
64
impl ::core::clone::Clone for VariantA {
@@ -17,46 +15,41 @@ impl ::core::clone::Clone for VariantB {
1715
VariantB
1816
}
1917
}
20-
pub enum Enum {
21-
VariantA(VariantA),
22-
VariantB { b: VariantB },
23-
}
24-
impl ::core::convert::From<VariantA> for Enum {
25-
fn from(inner: VariantA) -> Self {
26-
Self::VariantA(inner)
27-
}
28-
}
29-
impl ::core::convert::From<VariantB> for Enum {
30-
fn from(inner: VariantB) -> Self {
31-
Self::VariantB { b: inner }
18+
pub struct VariantC;
19+
#[automatically_derived]
20+
impl ::core::clone::Clone for VariantC {
21+
#[inline]
22+
fn clone(&self) -> VariantC {
23+
VariantC
3224
}
3325
}
34-
impl ::core::convert::TryFrom<Enum> for VariantA {
35-
type Error = Enum;
36-
fn try_from(outer: Enum) -> Result<Self, Self::Error> {
37-
match outer {
38-
Enum::VariantA(inner, ..) => Ok(inner),
39-
err => Err(err),
40-
}
26+
pub struct VariantD;
27+
#[automatically_derived]
28+
impl ::core::clone::Clone for VariantD {
29+
#[inline]
30+
fn clone(&self) -> VariantD {
31+
VariantD
4132
}
4233
}
43-
impl ::core::convert::TryFrom<Enum> for VariantB {
44-
type Error = Enum;
45-
fn try_from(outer: Enum) -> Result<Self, Self::Error> {
46-
match outer {
47-
Enum::VariantB { b: inner, .. } => Ok(inner),
48-
err => Err(err),
49-
}
50-
}
34+
#[enumcapsulate(exclude(From, TryInto))]
35+
pub enum Enum {
36+
OneTupleField(VariantA),
37+
OneStructField { variant: VariantB },
38+
#[enumcapsulate(exclude)]
39+
ExcludedWildcard(VariantC),
40+
#[enumcapsulate(exclude(FromVariant, AsVariant))]
41+
ExcludedSelective(VariantD),
5142
}
5243
impl ::enumcapsulate::FromVariant<VariantA> for Enum {
5344
fn from_variant(inner: VariantA) -> Self {
54-
Self::VariantA(inner)
45+
Self::OneTupleField(inner)
5546
}
5647
}
5748
impl ::enumcapsulate::FromVariant<VariantB> for Enum {
5849
fn from_variant(inner: VariantB) -> Self {
59-
Self::VariantB { b: inner }
50+
Self::OneStructField {
51+
variant: inner,
52+
}
6053
}
6154
}
6255
impl ::enumcapsulate::AsVariant<VariantA> for Enum
@@ -65,7 +58,7 @@ where
6558
{
6659
fn as_variant(&self) -> Option<VariantA> {
6760
match self {
68-
Enum::VariantA(inner, ..) => Some(inner.clone()),
61+
Enum::OneTupleField(inner, ..) => Some(inner.clone()),
6962
_ => None,
7063
}
7164
}
@@ -76,63 +69,89 @@ where
7669
{
7770
fn as_variant(&self) -> Option<VariantB> {
7871
match self {
79-
Enum::VariantB { b: inner, .. } => Some(inner.clone()),
72+
Enum::OneStructField { variant: inner, .. } => Some(inner.clone()),
8073
_ => None,
8174
}
8275
}
8376
}
8477
impl ::enumcapsulate::AsVariantRef<VariantA> for Enum {
8578
fn as_variant_ref(&self) -> Option<&VariantA> {
8679
match self {
87-
Enum::VariantA(inner, ..) => Some(inner),
80+
Enum::OneTupleField(inner, ..) => Some(inner),
8881
_ => None,
8982
}
9083
}
9184
}
9285
impl ::enumcapsulate::AsVariantRef<VariantB> for Enum {
9386
fn as_variant_ref(&self) -> Option<&VariantB> {
9487
match self {
95-
Enum::VariantB { b: inner, .. } => Some(inner),
88+
Enum::OneStructField { variant: inner, .. } => Some(inner),
89+
_ => None,
90+
}
91+
}
92+
}
93+
impl ::enumcapsulate::AsVariantRef<VariantD> for Enum {
94+
fn as_variant_ref(&self) -> Option<&VariantD> {
95+
match self {
96+
Enum::ExcludedSelective(inner, ..) => Some(inner),
9697
_ => None,
9798
}
9899
}
99100
}
100101
impl ::enumcapsulate::AsVariantMut<VariantA> for Enum {
101102
fn as_variant_mut(&mut self) -> Option<&mut VariantA> {
102103
match self {
103-
Enum::VariantA(inner, ..) => Some(inner),
104+
Enum::OneTupleField(inner, ..) => Some(inner),
104105
_ => None,
105106
}
106107
}
107108
}
108109
impl ::enumcapsulate::AsVariantMut<VariantB> for Enum {
109110
fn as_variant_mut(&mut self) -> Option<&mut VariantB> {
110111
match self {
111-
Enum::VariantB { b: inner, .. } => Some(inner),
112+
Enum::OneStructField { variant: inner, .. } => Some(inner),
113+
_ => None,
114+
}
115+
}
116+
}
117+
impl ::enumcapsulate::AsVariantMut<VariantD> for Enum {
118+
fn as_variant_mut(&mut self) -> Option<&mut VariantD> {
119+
match self {
120+
Enum::ExcludedSelective(inner, ..) => Some(inner),
112121
_ => None,
113122
}
114123
}
115124
}
116125
impl ::enumcapsulate::IntoVariant<VariantA> for Enum {
117126
fn into_variant(self) -> Result<VariantA, Self> {
118127
match self {
119-
Enum::VariantA(inner, ..) => Ok(inner),
128+
Enum::OneTupleField(inner, ..) => Ok(inner),
120129
err => Err(err),
121130
}
122131
}
123132
}
124133
impl ::enumcapsulate::IntoVariant<VariantB> for Enum {
125134
fn into_variant(self) -> Result<VariantB, Self> {
126135
match self {
127-
Enum::VariantB { b: inner, .. } => Ok(inner),
136+
Enum::OneStructField { variant: inner, .. } => Ok(inner),
137+
err => Err(err),
138+
}
139+
}
140+
}
141+
impl ::enumcapsulate::IntoVariant<VariantD> for Enum {
142+
fn into_variant(self) -> Result<VariantD, Self> {
143+
match self {
144+
Enum::ExcludedSelective(inner, ..) => Ok(inner),
128145
err => Err(err),
129146
}
130147
}
131148
}
132149
impl ::enumcapsulate::VariantDowncast for Enum {}
133150
pub enum EnumDiscriminant {
134-
VariantA,
135-
VariantB,
151+
OneTupleField,
152+
OneStructField,
153+
ExcludedWildcard,
154+
ExcludedSelective,
136155
}
137156
#[automatically_derived]
138157
impl ::core::marker::Copy for EnumDiscriminant {}
@@ -176,8 +195,10 @@ impl ::core::fmt::Debug for EnumDiscriminant {
176195
::core::fmt::Formatter::write_str(
177196
f,
178197
match self {
179-
EnumDiscriminant::VariantA => "VariantA",
180-
EnumDiscriminant::VariantB => "VariantB",
198+
EnumDiscriminant::OneTupleField => "OneTupleField",
199+
EnumDiscriminant::OneStructField => "OneStructField",
200+
EnumDiscriminant::ExcludedWildcard => "ExcludedWildcard",
201+
EnumDiscriminant::ExcludedSelective => "ExcludedSelective",
181202
},
182203
)
183204
}
@@ -186,18 +207,12 @@ impl ::enumcapsulate::VariantDiscriminant for Enum {
186207
type Discriminant = EnumDiscriminant;
187208
fn variant_discriminant(&self) -> Self::Discriminant {
188209
match self {
189-
Enum::VariantA(..) => EnumDiscriminant::VariantA,
190-
Enum::VariantB { .. } => EnumDiscriminant::VariantB,
210+
Enum::OneTupleField(..) => EnumDiscriminant::OneTupleField,
211+
Enum::OneStructField { .. } => EnumDiscriminant::OneStructField,
212+
Enum::ExcludedWildcard(..) => EnumDiscriminant::ExcludedWildcard,
213+
Enum::ExcludedSelective(..) => EnumDiscriminant::ExcludedSelective,
191214
_ => ::core::panicking::panic("internal error: entered unreachable code"),
192215
}
193216
}
194217
}
195-
fn check<T, U>()
196-
where
197-
T: FromVariant<U> + IntoVariant<U> + From<U> + TryInto<U> + AsVariant<U>
198-
+ AsVariantRef<U> + AsVariantMut<U>,
199-
{}
200-
fn main() {
201-
check::<Enum, VariantA>();
202-
check::<Enum, VariantB>();
203-
}
218+
fn main() {}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use enumcapsulate::Encapsulate;
2+
3+
#[derive(Clone)]
4+
pub struct VariantA;
5+
#[derive(Clone)]
6+
pub struct VariantB;
7+
#[derive(Clone)]
8+
pub struct VariantC;
9+
#[derive(Clone)]
10+
pub struct VariantD;
11+
12+
#[derive(Encapsulate)]
13+
#[enumcapsulate(exclude(From, TryInto))]
14+
pub enum Enum {
15+
OneTupleField(VariantA),
16+
OneStructField {
17+
variant: VariantB,
18+
},
19+
#[enumcapsulate(exclude)]
20+
ExcludedWildcard(VariantC),
21+
#[enumcapsulate(exclude(FromVariant, AsVariant))]
22+
ExcludedSelective(VariantD),
23+
}
24+
25+
fn main() {}

0 commit comments

Comments
 (0)