Skip to content

Commit c280d84

Browse files
committed
enumerable: make fields private
1 parent c39032b commit c280d84

File tree

3 files changed

+70
-48
lines changed

3 files changed

+70
-48
lines changed

tests/tests/enumerable.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,14 @@ fn test_manual_impl() {
1111

1212
static ENUM_STRUCT_FIELDS: &[NamedField<'static>] = &[NamedField::new("x")];
1313
static ENUM_VARIANTS: &[VariantDef<'static>] = &[
14-
VariantDef {
15-
name: "Struct",
16-
fields: Fields::NamedStatic(&ENUM_STRUCT_FIELDS),
17-
is_dynamic: false,
18-
},
19-
VariantDef {
20-
name: "Tuple",
21-
fields: Fields::Unnamed,
22-
is_dynamic: false,
23-
},
24-
VariantDef {
25-
name: "Unit",
26-
fields: Fields::Unnamed,
27-
is_dynamic: false,
28-
},
14+
VariantDef::new("Struct", Fields::NamedStatic(&ENUM_STRUCT_FIELDS), false),
15+
VariantDef::new("Tuple", Fields::Unnamed, false),
16+
VariantDef::new("Unit", Fields::Unnamed, false),
2917
];
3018

3119
impl Enumerable for Enum {
3220
fn definition(&self) -> EnumDef<'_> {
33-
EnumDef {
34-
name: "Enum",
35-
variants: ENUM_VARIANTS,
36-
is_dynamic: false,
37-
}
21+
EnumDef::new("Enum", ENUM_VARIANTS, false)
3822
}
3923
}
4024

valuable-derive/src/expand.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,11 @@ fn derive_enum(input: &syn::DeriveInput, data: &syn::DataEnum) -> TokenStream {
119119
let variant_name = &variant.ident;
120120
let variant_name_literal = variant_name.to_string();
121121
variant_defs.push(quote! {
122-
::valuable::VariantDef {
123-
name: #variant_name_literal,
124-
fields: ::valuable::field::Fields::NamedStatic(#named_fields_static_name),
125-
is_dynamic: false,
126-
},
122+
::valuable::VariantDef::new(
123+
#variant_name_literal,
124+
::valuable::field::Fields::NamedStatic(#named_fields_static_name),
125+
false,
126+
),
127127
});
128128

129129
let fields: Vec<_> = variant
@@ -149,11 +149,11 @@ fn derive_enum(input: &syn::DeriveInput, data: &syn::DataEnum) -> TokenStream {
149149
let variant_name = &variant.ident;
150150
let variant_name_literal = variant_name.to_string();
151151
variant_defs.push(quote! {
152-
::valuable::VariantDef {
153-
name: #variant_name_literal,
154-
fields: ::valuable::field::Fields::Unnamed,
155-
is_dynamic: false,
156-
},
152+
::valuable::VariantDef::new(
153+
#variant_name_literal,
154+
::valuable::field::Fields::Unnamed,
155+
false,
156+
),
157157
});
158158

159159
let bindings: Vec<_> = (0..variant.fields.len())
@@ -174,11 +174,11 @@ fn derive_enum(input: &syn::DeriveInput, data: &syn::DataEnum) -> TokenStream {
174174
let variant_name = &variant.ident;
175175
let variant_name_literal = variant_name.to_string();
176176
variant_defs.push(quote! {
177-
::valuable::VariantDef {
178-
name: #variant_name_literal,
179-
fields: ::valuable::field::Fields::Unnamed,
180-
is_dynamic: false,
181-
},
177+
::valuable::VariantDef::new(
178+
#variant_name_literal,
179+
::valuable::field::Fields::Unnamed,
180+
false,
181+
),
182182
});
183183

184184
visit_variants.push(quote! {
@@ -204,11 +204,11 @@ fn derive_enum(input: &syn::DeriveInput, data: &syn::DataEnum) -> TokenStream {
204204
let enumerable_impl = quote! {
205205
impl #impl_generics ::valuable::Enumerable for #name #ty_generics #where_clause {
206206
fn definition(&self) -> ::valuable::EnumDef<'_> {
207-
::valuable::EnumDef {
208-
name: #name_literal,
209-
variants: #variants_static_name,
210-
is_dynamic: false,
211-
}
207+
::valuable::EnumDef::new(
208+
#name_literal,
209+
#variants_static_name,
210+
false,
211+
)
212212
}
213213
}
214214
};

valuable/src/enumerable.rs

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,42 @@ pub trait Enumerable: Valuable {
99

1010
pub struct EnumDef<'a> {
1111
/// Enum type name
12-
pub name: &'a str,
12+
name: &'a str,
1313

1414
/// Known variants
15-
pub variants: &'a [VariantDef<'a>],
15+
variants: &'a [VariantDef<'a>],
1616

1717
/// `true` when not all variants are statically known
18-
pub is_dynamic: bool,
18+
is_dynamic: bool,
1919
}
2020

2121
pub struct VariantDef<'a> {
2222
/// Variant name
23-
pub name: &'a str,
23+
name: &'a str,
2424

25-
pub fields: Fields<'a>,
25+
fields: Fields<'a>,
2626

2727
/// Are all fields statically known?
28-
pub is_dynamic: bool,
28+
is_dynamic: bool,
2929
}
3030

3131
pub struct Variant<'a> {
3232
pub name: &'a str,
3333
}
3434

35-
impl EnumDef<'_> {
35+
impl<'a> EnumDef<'a> {
36+
pub const fn new(
37+
name: &'a str,
38+
variants: &'a [VariantDef<'a>],
39+
is_dynamic: bool,
40+
) -> EnumDef<'a> {
41+
EnumDef {
42+
name,
43+
variants,
44+
is_dynamic,
45+
}
46+
}
47+
3648
pub fn name(&self) -> &str {
3749
self.name
3850
}
@@ -46,7 +58,33 @@ impl EnumDef<'_> {
4658
}
4759
}
4860

49-
impl Variant<'_> {
61+
impl<'a> VariantDef<'a> {
62+
pub const fn new(name: &'a str, fields: Fields<'a>, is_dynamic: bool) -> VariantDef<'a> {
63+
VariantDef {
64+
name,
65+
fields,
66+
is_dynamic,
67+
}
68+
}
69+
70+
pub fn name(&self) -> &str {
71+
self.name
72+
}
73+
74+
pub fn fields(&self) -> &Fields<'_> {
75+
&self.fields
76+
}
77+
78+
pub fn is_dynamic(&self) -> bool {
79+
self.is_dynamic
80+
}
81+
}
82+
83+
impl<'a> Variant<'a> {
84+
pub const fn new(name: &'a str) -> Variant<'a> {
85+
Variant { name }
86+
}
87+
5088
pub fn name(&self) -> &str {
5189
self.name
5290
}

0 commit comments

Comments
 (0)