fix bad enum macro generation

This commit is contained in:
mat 2022-09-06 23:55:39 -05:00
parent 8fe02ed115
commit 029fa33f55
2 changed files with 28 additions and 24 deletions

View file

@ -53,6 +53,7 @@ fn create_impl_mcbufreadable(ident: &Ident, data: &Data) -> proc_macro2::TokenSt
syn::Data::Enum(syn::DataEnum { variants, .. }) => {
let mut match_contents = quote!();
let mut variant_discrim: u32 = 0;
let mut first = true;
for variant in variants {
let variant_name = &variant.ident;
match &variant.discriminant.as_ref() {
@ -71,9 +72,13 @@ fn create_impl_mcbufreadable(ident: &Ident, data: &Data) -> proc_macro2::TokenSt
}
}
None => {
if first {
first = false;
} else {
variant_discrim += 1;
}
}
}
let reader = match variant.fields {
syn::Fields::Named(_) => {
panic!("writing named fields in enums is not supported")
@ -160,10 +165,12 @@ fn create_impl_mcbufwritable(ident: &Ident, data: &Data) -> proc_macro2::TokenSt
let mut is_data_enum = false;
let mut match_arms = quote!();
let mut variant_discrim: u32 = 0;
let mut first = true;
for variant in variants {
// figure out the discriminant
if let Some(discriminant) = &variant.discriminant {
variant_discrim = match &discriminant.1 {
let variant_name = &variant.ident;
match &variant.discriminant.as_ref() {
Some(d) => {
variant_discrim = match &d.1 {
syn::Expr::Lit(e) => match &e.lit {
syn::Lit::Int(i) => i.base10_parse().unwrap(),
_ => panic!("Error parsing enum discriminant as int"),
@ -172,15 +179,18 @@ fn create_impl_mcbufwritable(ident: &Ident, data: &Data) -> proc_macro2::TokenSt
panic!("Negative enum discriminants are not supported")
}
_ => {
panic!(
"Error parsing enum discriminant as literal (is {:?})",
discriminant.1
)
panic!("Error parsing enum discriminant as literal (is {:?})", d.1)
}
};
}
}
None => {
if first {
first = false;
} else {
variant_discrim += 1;
}
}
}
match &variant.fields {
syn::Fields::Named(_) => {

View file

@ -71,10 +71,4 @@ pub struct Parameters {
pub player_suffix: Component,
}
#[derive(McBuf, Copy, Clone, Debug)]
pub enum RenderType {
Integer,
Hearts,
}
type PlayerList = Vec<String>;