From b08d3d55d7351eff6e27a09d732078c038539958 Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 2 Feb 2025 21:15:45 +0000 Subject: start implementing data driven registries --- azalea-buf/src/write.rs | 86 ++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 40 deletions(-) (limited to 'azalea-buf/src/write.rs') diff --git a/azalea-buf/src/write.rs b/azalea-buf/src/write.rs index 1092586d..73bcbdce 100755 --- a/azalea-buf/src/write.rs +++ b/azalea-buf/src/write.rs @@ -1,14 +1,13 @@ -use std::{collections::HashMap, io::Write}; +use std::{ + collections::HashMap, + io::{self, Write}, +}; use byteorder::{BigEndian, WriteBytesExt}; use super::{UnsizedByteArray, MAX_STRING_LENGTH}; -fn write_utf_with_len( - buf: &mut impl Write, - string: &str, - len: usize, -) -> Result<(), std::io::Error> { +fn write_utf_with_len(buf: &mut impl Write, string: &str, len: usize) -> Result<(), io::Error> { if string.len() > len { panic!( "String too big (was {} bytes encoded, max {})", @@ -21,21 +20,21 @@ fn write_utf_with_len( } pub trait AzaleaWrite { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error>; + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error>; } pub trait AzaleaWriteVar { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error>; + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error>; } impl AzaleaWrite for i32 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_i32::(buf, *self) } } impl AzaleaWriteVar for i32 { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { let mut buffer = [0]; let mut value = *self; if value == 0 { @@ -54,19 +53,19 @@ impl AzaleaWriteVar for i32 { } impl AzaleaWrite for UnsizedByteArray { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { buf.write_all(self) } } impl AzaleaWrite for Vec { - default fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + default fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { self[..].azalea_write(buf) } } impl AzaleaWrite for [T] { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { (self.len() as u32).azalea_write_var(buf)?; for item in self { T::azalea_write(item, buf)?; @@ -76,7 +75,7 @@ impl AzaleaWrite for [T] { } impl AzaleaWrite for HashMap { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { u32::azalea_write_var(&(self.len() as u32), buf)?; for (key, value) in self { key.azalea_write(buf)?; @@ -88,7 +87,7 @@ impl AzaleaWrite for HashMap { } impl AzaleaWriteVar for HashMap { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { u32::azalea_write_var(&(self.len() as u32), buf)?; for (key, value) in self { key.azalea_write(buf)?; @@ -100,38 +99,38 @@ impl AzaleaWriteVar for HashMap { } impl AzaleaWrite for Vec { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { (self.len() as u32).azalea_write_var(buf)?; buf.write_all(self) } } impl AzaleaWrite for String { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { write_utf_with_len(buf, self, MAX_STRING_LENGTH.into()) } } impl AzaleaWrite for &str { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { write_utf_with_len(buf, self, MAX_STRING_LENGTH.into()) } } impl AzaleaWrite for u32 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { i32::azalea_write(&(*self as i32), buf) } } impl AzaleaWriteVar for u32 { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { i32::azalea_write_var(&(*self as i32), buf) } } impl AzaleaWriteVar for i64 { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { let mut buffer = [0]; let mut value = *self; if value == 0 { @@ -150,25 +149,25 @@ impl AzaleaWriteVar for i64 { } impl AzaleaWriteVar for u64 { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { i64::azalea_write_var(&(*self as i64), buf) } } impl AzaleaWrite for u16 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { i16::azalea_write(&(*self as i16), buf) } } impl AzaleaWriteVar for u16 { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { i32::azalea_write_var(&(*self as i32), buf) } } impl AzaleaWriteVar for Vec { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { u32::azalea_write_var(&(self.len() as u32), buf)?; for i in self { i.azalea_write_var(buf)?; @@ -178,56 +177,56 @@ impl AzaleaWriteVar for Vec { } impl AzaleaWrite for u8 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_u8(buf, *self) } } impl AzaleaWrite for i16 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_i16::(buf, *self) } } impl AzaleaWrite for i64 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_i64::(buf, *self) } } impl AzaleaWrite for u64 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { i64::azalea_write(&(*self as i64), buf) } } impl AzaleaWrite for bool { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { let byte = u8::from(*self); byte.azalea_write(buf) } } impl AzaleaWrite for i8 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { (*self as u8).azalea_write(buf) } } impl AzaleaWrite for f32 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_f32::(buf, *self) } } impl AzaleaWrite for f64 { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { WriteBytesExt::write_f64::(buf, *self) } } impl AzaleaWrite for Option { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { if let Some(s) = self { true.azalea_write(buf)?; s.azalea_write(buf)?; @@ -239,7 +238,7 @@ impl AzaleaWrite for Option { } impl AzaleaWriteVar for Option { - fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write_var(&self, buf: &mut impl Write) -> Result<(), io::Error> { if let Some(s) = self { true.azalea_write(buf)?; s.azalea_write_var(buf)?; @@ -252,7 +251,7 @@ impl AzaleaWriteVar for Option { // [T; N] impl AzaleaWrite for [T; N] { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { for i in self { i.azalea_write(buf)?; } @@ -261,7 +260,7 @@ impl AzaleaWrite for [T; N] { } impl AzaleaWrite for simdnbt::owned::NbtTag { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { let mut data = Vec::new(); self.write(&mut data); buf.write_all(&data) @@ -269,7 +268,7 @@ impl AzaleaWrite for simdnbt::owned::NbtTag { } impl AzaleaWrite for simdnbt::owned::NbtCompound { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { let mut data = Vec::new(); simdnbt::owned::NbtTag::Compound(self.clone()).write(&mut data); buf.write_all(&data) @@ -277,7 +276,7 @@ impl AzaleaWrite for simdnbt::owned::NbtCompound { } impl AzaleaWrite for simdnbt::owned::Nbt { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { let mut data = Vec::new(); self.write_unnamed(&mut data); buf.write_all(&data) @@ -288,7 +287,14 @@ impl AzaleaWrite for Box where T: AzaleaWrite, { - fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { T::azalea_write(&**self, buf) } } + +impl AzaleaWrite for (A, B) { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { + self.0.azalea_write(buf)?; + self.1.azalea_write(buf) + } +} -- cgit v1.2.3