aboutsummaryrefslogtreecommitdiff
path: root/src/helper.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-09 14:20:02 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-09 14:20:02 +0100
commit41f35c442c821b3fdab7e8605b0583ba5ce38d74 (patch)
treeae8dc41167811e19ace23d5a5e88e55115f22865 /src/helper.rs
downloadunity-tools-41f35c442c821b3fdab7e8605b0583ba5ce38d74.tar
unity-tools-41f35c442c821b3fdab7e8605b0583ba5ce38d74.tar.bz2
unity-tools-41f35c442c821b3fdab7e8605b0583ba5ce38d74.tar.zst
lz4 fails for some reason
Diffstat (limited to 'src/helper.rs')
-rw-r--r--src/helper.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/helper.rs b/src/helper.rs
new file mode 100644
index 0000000..79c2872
--- /dev/null
+++ b/src/helper.rs
@@ -0,0 +1,43 @@
+use std::io::{Read, Result};
+
+pub trait ReadExt {
+ fn read_u16_be(&mut self) -> Result<u16>;
+ fn read_u32_be(&mut self) -> Result<u32>;
+ fn read_u64_be(&mut self) -> Result<u64>;
+ fn read_u128_be(&mut self) -> Result<u128>;
+ fn read_cstr(&mut self) -> Result<String>;
+}
+impl<T: Read> ReadExt for T {
+ fn read_u16_be(&mut self) -> Result<u16> {
+ let mut buf = [0; 2];
+ self.read_exact(&mut buf)?;
+ Ok(u16::from_be_bytes(buf))
+ }
+ fn read_u32_be(&mut self) -> Result<u32> {
+ let mut buf = [0; 4];
+ self.read_exact(&mut buf)?;
+ Ok(u32::from_be_bytes(buf))
+ }
+ fn read_u64_be(&mut self) -> Result<u64> {
+ let mut buf = [0; 8];
+ self.read_exact(&mut buf)?;
+ Ok(u64::from_be_bytes(buf))
+ }
+ fn read_u128_be(&mut self) -> Result<u128> {
+ let mut buf = [0; 16];
+ self.read_exact(&mut buf)?;
+ Ok(u128::from_be_bytes(buf))
+ }
+ fn read_cstr(&mut self) -> Result<String> {
+ let mut buf = [0; 1];
+ let mut s = Vec::new();
+ loop {
+ self.read_exact(&mut buf)?;
+ if buf[0] == 0 {
+ break;
+ }
+ s.push(buf[0]);
+ }
+ Ok(String::from_utf8_lossy(&s).to_string())
+ }
+}