aboutsummaryrefslogtreecommitdiff
path: root/src/helper.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-10 12:15:55 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-10 12:15:55 +0100
commitd786df60b89e52c5e4a605f95c677f4bce4c6ec3 (patch)
tree3d39b967c91c964de458fdf28297c8fb52d1688c /src/helper.rs
parentbc5c636a61411d8c29e64223a7d04263f2e68669 (diff)
downloadunity-tools-d786df60b89e52c5e4a605f95c677f4bce4c6ec3.tar
unity-tools-d786df60b89e52c5e4a605f95c677f4bce4c6ec3.tar.bz2
unity-tools-d786df60b89e52c5e4a605f95c677f4bce4c6ec3.tar.zst
start work on serialized files
Diffstat (limited to 'src/helper.rs')
-rw-r--r--src/helper.rs76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/helper.rs b/src/helper.rs
index 79c2872..c2b9a92 100644
--- a/src/helper.rs
+++ b/src/helper.rs
@@ -1,28 +1,104 @@
use std::io::{Read, Result};
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub enum Endianness {
+ Big,
+ Little,
+}
+
pub trait ReadExt {
+ fn read_u8(&mut self) -> Result<u8>;
fn read_u16_be(&mut self) -> Result<u16>;
+ fn read_i16(&mut self, e: Endianness) -> Result<i16>;
+ fn read_i16_be(&mut self) -> Result<i16>;
+ fn read_i16_le(&mut self) -> Result<i16>;
+ fn read_i32(&mut self, e: Endianness) -> Result<i32>;
+ fn read_i32_be(&mut self) -> Result<i32>;
+ fn read_i32_le(&mut self) -> Result<i32>;
+ fn read_u32(&mut self, e: Endianness) -> Result<u32>;
fn read_u32_be(&mut self) -> Result<u32>;
+ fn read_u32_le(&mut self) -> Result<u32>;
+ fn read_u64(&mut self, e: Endianness) -> Result<u64>;
fn read_u64_be(&mut self) -> Result<u64>;
+ fn read_u64_le(&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_u8(&mut self) -> Result<u8> {
+ let mut buf = [0; 2];
+ self.read_exact(&mut buf)?;
+ Ok(buf[0])
+ }
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_i16(&mut self, e: Endianness) -> Result<i16> {
+ match e {
+ Endianness::Big => self.read_i16_be(),
+ Endianness::Little => self.read_i16_le(),
+ }
+ }
+ fn read_i16_be(&mut self) -> Result<i16> {
+ let mut buf = [0; 2];
+ self.read_exact(&mut buf)?;
+ Ok(i16::from_be_bytes(buf))
+ }
+ fn read_i16_le(&mut self) -> Result<i16> {
+ let mut buf = [0; 2];
+ self.read_exact(&mut buf)?;
+ Ok(i16::from_le_bytes(buf))
+ }
+ fn read_i32(&mut self, e: Endianness) -> Result<i32> {
+ match e {
+ Endianness::Big => self.read_i32_be(),
+ Endianness::Little => self.read_i32_le(),
+ }
+ }
+ fn read_i32_be(&mut self) -> Result<i32> {
+ let mut buf = [0; 4];
+ self.read_exact(&mut buf)?;
+ Ok(i32::from_be_bytes(buf))
+ }
+ fn read_i32_le(&mut self) -> Result<i32> {
+ let mut buf = [0; 4];
+ self.read_exact(&mut buf)?;
+ Ok(i32::from_le_bytes(buf))
+ }
+ fn read_u32(&mut self, e: Endianness) -> Result<u32> {
+ match e {
+ Endianness::Big => self.read_u32_be(),
+ Endianness::Little => self.read_u32_le(),
+ }
+ }
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_u32_le(&mut self) -> Result<u32> {
+ let mut buf = [0; 4];
+ self.read_exact(&mut buf)?;
+ Ok(u32::from_le_bytes(buf))
+ }
+ fn read_u64(&mut self, e: Endianness) -> Result<u64> {
+ match e {
+ Endianness::Big => self.read_u64_be(),
+ Endianness::Little => self.read_u64_le(),
+ }
+ }
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_u64_le(&mut self) -> Result<u64> {
+ let mut buf = [0; 8];
+ self.read_exact(&mut buf)?;
+ Ok(u64::from_le_bytes(buf))
+ }
fn read_u128_be(&mut self) -> Result<u128> {
let mut buf = [0; 16];
self.read_exact(&mut buf)?;