aboutsummaryrefslogtreecommitdiff
path: root/azalea-buf
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2024-04-23 10:34:50 -0500
committerGitHub <noreply@github.com>2024-04-23 10:34:50 -0500
commit1d80f531b74bc3b31023753acb81b35efcdadd73 (patch)
tree675635c7c41fbb456e3e0dd7b9f09c7211d356f0 /azalea-buf
parent0ddad8bd9c7c0e8846aec8bc90c95416418c9a63 (diff)
downloadazalea-drasl-1d80f531b74bc3b31023753acb81b35efcdadd73.tar.xz
1.20.5 (#127)
* 23w51b * make recalculate_near_end_of_path public so other plugins can do .after(recalculate_near_end_of_path) * update to 24w03a i think * start implementing 24w13a * registries work (but a lot of packets are still broken) * fix recipes and commands packets * i love codecs :D i am not going insane :D mojang's java is very readable :D * item components are "implemented" meowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeow * update to 1.20.5-pre3 * fix all the broken packets and clippy (mojang please don't do an update like this again or i will murder someone) * 1.20.5-rc1 * fix failing tests * 1.20.5
Diffstat (limited to 'azalea-buf')
-rw-r--r--azalea-buf/azalea-buf-macros/src/read.rs38
-rw-r--r--azalea-buf/azalea-buf-macros/src/write.rs36
-rwxr-xr-xazalea-buf/src/read.rs20
-rwxr-xr-xazalea-buf/src/write.rs9
4 files changed, 65 insertions, 38 deletions
diff --git a/azalea-buf/azalea-buf-macros/src/read.rs b/azalea-buf/azalea-buf-macros/src/read.rs
index c3e9595c..c5c484e7 100644
--- a/azalea-buf/azalea-buf-macros/src/read.rs
+++ b/azalea-buf/azalea-buf-macros/src/read.rs
@@ -38,24 +38,34 @@ fn read_named_fields(
pub fn create_impl_mcbufreadable(ident: &Ident, data: &Data) -> proc_macro2::TokenStream {
match data {
- syn::Data::Struct(syn::DataStruct { fields, .. }) => {
- let syn::Fields::Named(FieldsNamed { named, .. }) = fields else {
- panic!("#[derive(McBuf)] can only be used on structs with named fields")
- };
-
- let (read_fields, read_field_names) = read_named_fields(named);
+ syn::Data::Struct(syn::DataStruct { fields, .. }) => match fields {
+ syn::Fields::Named(FieldsNamed { named, .. }) => {
+ let (read_fields, read_field_names) = read_named_fields(named);
- quote! {
- impl azalea_buf::McBufReadable for #ident {
- fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
- #(#read_fields)*
- Ok(#ident {
- #(#read_field_names: #read_field_names),*
- })
+ quote! {
+ impl azalea_buf::McBufReadable for #ident {
+ fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
+ #(#read_fields)*
+ Ok(Self {
+ #(#read_field_names: #read_field_names),*
+ })
+ }
+ }
}
}
+ syn::Fields::Unit => {
+ quote! {
+ impl azalea_buf::McBufReadable for #ident {
+ fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
+ Ok(Self)
+ }
+ }
+ }
}
- }
+ _ => {
+ panic!("#[derive(McBuf)] can only be used on structs with named fields")
+ }
+ },
syn::Data::Enum(syn::DataEnum { variants, .. }) => {
let mut match_contents = quote!();
let mut variant_discrim: u32 = 0;
diff --git a/azalea-buf/azalea-buf-macros/src/write.rs b/azalea-buf/azalea-buf-macros/src/write.rs
index 35c2d49a..4d31f39e 100644
--- a/azalea-buf/azalea-buf-macros/src/write.rs
+++ b/azalea-buf/azalea-buf-macros/src/write.rs
@@ -39,23 +39,33 @@ fn write_named_fields(
pub fn create_impl_mcbufwritable(ident: &Ident, data: &Data) -> proc_macro2::TokenStream {
match data {
- syn::Data::Struct(syn::DataStruct { fields, .. }) => {
- let syn::Fields::Named(FieldsNamed { named, .. }) = fields else {
- panic!("#[derive(McBuf)] can only be used on structs with named fields")
- };
-
- let write_fields =
- write_named_fields(named, Some(&Ident::new("self", Span::call_site())));
+ syn::Data::Struct(syn::DataStruct { fields, .. }) => match fields {
+ syn::Fields::Named(FieldsNamed { named, .. }) => {
+ let write_fields =
+ write_named_fields(named, Some(&Ident::new("self", Span::call_site())));
- quote! {
- impl azalea_buf::McBufWritable for #ident {
- fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
- #write_fields
- Ok(())
+ quote! {
+ impl azalea_buf::McBufWritable for #ident {
+ fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
+ #write_fields
+ Ok(())
+ }
}
}
}
- }
+ syn::Fields::Unit => {
+ quote! {
+ impl azalea_buf::McBufWritable for #ident {
+ fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
+ Ok(())
+ }
+ }
+ }
+ }
+ _ => {
+ panic!("#[derive(McBuf)] can only be used on structs with named fields")
+ }
+ },
syn::Data::Enum(syn::DataEnum { variants, .. }) => {
// remember whether it's a data variant so we can do an optimization later
let mut is_data_enum = false;
diff --git a/azalea-buf/src/read.rs b/azalea-buf/src/read.rs
index d5c4d0a8..b3352a80 100755
--- a/azalea-buf/src/read.rs
+++ b/azalea-buf/src/read.rs
@@ -103,17 +103,6 @@ fn read_utf_with_len(buf: &mut Cursor<&[u8]>, max_length: u32) -> Result<String,
Ok(string)
}
-// fast varints modified from https://github.com/luojia65/mc-varint/blob/master/src/lib.rs#L67
-/// Read a single varint from the reader and return the value, along with the
-/// number of bytes read
-// pub async fn read_varint_async(
-// reader: &mut (dyn AsyncRead + Unpin + Send),
-// ) -> Result<i32, BufReadError> { let mut buffer = [0]; let mut ans = 0; for i
-// in 0..5 { reader.read_exact(&mut buffer).await?; ans |= ((buffer[0] &
-// 0b0111_1111) as i32) << (7 * i); if buffer[0] & 0b1000_0000 == 0 { break; }
-// } Ok(ans)
-// }
-
pub trait McBufReadable
where
Self: Sized,
@@ -373,3 +362,12 @@ impl McBufReadable for simdnbt::owned::Nbt {
Ok(simdnbt::owned::Nbt::read_unnamed(buf)?)
}
}
+
+impl<T> McBufReadable for Box<T>
+where
+ T: McBufReadable,
+{
+ fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ Ok(Box::new(T::read_from(buf)?))
+ }
+}
diff --git a/azalea-buf/src/write.rs b/azalea-buf/src/write.rs
index 7b1fb331..61dedfd8 100755
--- a/azalea-buf/src/write.rs
+++ b/azalea-buf/src/write.rs
@@ -281,3 +281,12 @@ impl McBufWritable for simdnbt::owned::Nbt {
buf.write_all(&data)
}
}
+
+impl<T> McBufWritable for Box<T>
+where
+ T: McBufWritable,
+{
+ fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ T::write_into(&**self, buf)
+ }
+}