Skip to content

Commit af4d79f

Browse files
committed
Versionize enum unit variant
Signed-off-by: Ioana Chirca <[email protected]>
1 parent 8012e26 commit af4d79f

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# v0.1.1
2+
3+
- Removed "versionize" dependency.
4+
- Added support for (de)serializing enum variants with zero or more fields.
5+
16
# v0.1.0
27

38
- "versionize_derive" v0.1.0 first release.

src/fields/enum_variant.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,16 @@ impl EnumVariant {
6262

6363
if !self.exists_at(target_version) {
6464
if let Some(default_fn_ident) = get_ident_attr(&self.attrs, DEFAULT_FN) {
65-
return quote! {
66-
Self::#field_ident(..) => {
67-
// Call user defined fn to provide a variant that exists in target version.
68-
let new_variant = self.#default_fn_ident(version)?;
69-
// The new_variant will serialize it's index and data.
70-
new_variant.serialize(writer, version_map, app_version)?;
71-
},
65+
let field_type_ident = if self.ty.is_empty() {
66+
quote! { Self::#field_ident => }
67+
} else {
68+
quote! { Self::#field_ident(..) => }
7269
};
70+
71+
let mut serializer = proc_macro2::TokenStream::new();
72+
serializer.extend(field_type_ident);
73+
serializer.extend(self.default_fn_serializer(default_fn_ident));
74+
return serializer;
7375
} else {
7476
panic!("Variant {} does not exist in version {}, please implement a default_fn function that provides a default value for this variant.", field_ident.to_string(), target_version);
7577
}
@@ -136,4 +138,15 @@ impl EnumVariant {
136138
},
137139
};
138140
}
141+
142+
fn default_fn_serializer(&self, default_fn_ident: syn::Ident) -> proc_macro2::TokenStream {
143+
quote! {
144+
{
145+
// Call user defined fn to provide a variant that exists in target version.
146+
let new_variant = self.#default_fn_ident(version)?;
147+
// The new_variant will serialize its index and data.
148+
new_variant.serialize(writer, version_map, app_version)?;
149+
},
150+
}
151+
}
139152
}

0 commit comments

Comments
 (0)