aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/packet-macros/src
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-26 17:55:07 -0500
committermat <github@matdoes.dev>2022-05-26 17:55:07 -0500
commit0530c5757925c615d0529926b1550da05f0669d9 (patch)
tree24b40c461a8117dee019c8941e205f375e3a3c21 /azalea-protocol/packet-macros/src
parent1e145a82b80fb0402e8a64624454d9bfee77bc72 (diff)
downloadazalea-drasl-0530c5757925c615d0529926b1550da05f0669d9.tar.xz
Fixes
Diffstat (limited to 'azalea-protocol/packet-macros/src')
-rwxr-xr-xazalea-protocol/packet-macros/src/lib.rs26
1 files changed, 20 insertions, 6 deletions
diff --git a/azalea-protocol/packet-macros/src/lib.rs b/azalea-protocol/packet-macros/src/lib.rs
index f3fe4e40..ae0fea0c 100755
--- a/azalea-protocol/packet-macros/src/lib.rs
+++ b/azalea-protocol/packet-macros/src/lib.rs
@@ -56,13 +56,23 @@ 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: usize = 0;
for variant in variants {
let variant_name = &variant.ident;
- let variant_discrim = &variant
- .discriminant
- .as_ref()
- .expect("enum variant must have a discriminant")
- .1;
+ 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"),
+ },
+ _ => panic!("Error parsing enum discriminant"),
+ }
+ }
+ None => {
+ variant_discrim += 1;
+ }
+ }
match_contents.extend(quote! {
#variant_discrim => Ok(Self::#variant_name),
});
@@ -344,6 +354,7 @@ pub fn declare_state_packets(input: TokenStream) -> TokenStream {
});
}
for PacketIdPair { id, module, name } in input.clientbound.packets {
+ let name_litstr = syn::LitStr::new(&name.to_string(), name.span());
enum_contents.extend(quote! {
#name(#module::#name),
});
@@ -354,7 +365,10 @@ pub fn declare_state_packets(input: TokenStream) -> TokenStream {
#state_name::#name(packet) => packet.write(buf),
});
clientbound_read_match_contents.extend(quote! {
- #id => #module::#name::read(buf)?,
+ #id => {
+ println!("reading packet {}", #name_litstr);
+ #module::#name::read(buf)?
+ },
});
}