aboutsummaryrefslogtreecommitdiff
path: root/azalea-buf/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-buf/src')
-rwxr-xr-xazalea-buf/src/read.rs33
-rwxr-xr-xazalea-buf/src/write.rs24
2 files changed, 57 insertions, 0 deletions
diff --git a/azalea-buf/src/read.rs b/azalea-buf/src/read.rs
index 78db7357..d5c4d0a8 100755
--- a/azalea-buf/src/read.rs
+++ b/azalea-buf/src/read.rs
@@ -50,6 +50,18 @@ pub enum BufReadError {
#[backtrace]
source: serde_json::Error,
},
+ #[error("{source}")]
+ Nbt {
+ #[from]
+ #[backtrace]
+ source: simdnbt::Error,
+ },
+ #[error("{source}")]
+ DeserializeNbt {
+ #[from]
+ #[backtrace]
+ source: simdnbt::DeserializeError,
+ },
}
fn read_bytes<'a>(buf: &'a mut Cursor<&[u8]>, length: usize) -> Result<&'a [u8], BufReadError> {
@@ -340,3 +352,24 @@ impl<T: McBufReadable, const N: usize> McBufReadable for [T; N] {
})
}
}
+
+impl McBufReadable for simdnbt::owned::NbtTag {
+ fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ Ok(simdnbt::owned::NbtTag::read(buf)?)
+ }
+}
+
+impl McBufReadable for simdnbt::owned::NbtCompound {
+ fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ match simdnbt::owned::NbtTag::read(buf)? {
+ simdnbt::owned::NbtTag::Compound(compound) => Ok(compound),
+ _ => Err(BufReadError::Custom("Expected compound tag".to_string())),
+ }
+ }
+}
+
+impl McBufReadable for simdnbt::owned::Nbt {
+ fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ Ok(simdnbt::owned::Nbt::read_unnamed(buf)?)
+ }
+}
diff --git a/azalea-buf/src/write.rs b/azalea-buf/src/write.rs
index f48bf2ec..03d40d79 100755
--- a/azalea-buf/src/write.rs
+++ b/azalea-buf/src/write.rs
@@ -257,3 +257,27 @@ impl<T: McBufWritable, const N: usize> McBufWritable for [T; N] {
Ok(())
}
}
+
+impl McBufWritable for simdnbt::owned::NbtTag {
+ fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ let mut data = Vec::new();
+ self.write(&mut data);
+ data.write_into(buf)
+ }
+}
+
+impl McBufWritable for simdnbt::owned::NbtCompound {
+ fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ let mut data = Vec::new();
+ simdnbt::owned::NbtTag::Compound(self.clone()).write(&mut data);
+ data.write_into(buf)
+ }
+}
+
+impl McBufWritable for simdnbt::owned::Nbt {
+ fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ let mut data = Vec::new();
+ self.write_unnamed(&mut data);
+ data.write_into(buf)
+ }
+}