[Crate] Use Byteorder crate

This commit is contained in:
CosminPerRam 2023-03-09 16:41:01 +02:00
parent e163774685
commit 9ad2f143dd
3 changed files with 17 additions and 22 deletions

View file

@ -16,6 +16,8 @@ rust-version = "1.56.1"
no_games = [] no_games = []
[dependencies] [dependencies]
byteorder = "1.4.3"
bzip2-rs = "0.1.2" # for compression bzip2-rs = "0.1.2" # for compression
crc32fast = "1.3.2" crc32fast = "1.3.2"

View file

@ -1,5 +1,6 @@
use crate::GDResult; use crate::GDResult;
use crate::GDError::{PacketBad, PacketUnderflow}; use crate::GDError::{PacketBad, PacketUnderflow};
use byteorder::{ByteOrder, LittleEndian, BigEndian};
pub enum Endianess { pub enum Endianess {
Little, Big Little, Big
@ -39,11 +40,9 @@ impl Bufferer {
return Err(PacketUnderflow); return Err(PacketUnderflow);
} }
let source_data: [u8; 2] = (&self.data[self.position..self.position + 2]).try_into().unwrap();
let value = match self.endianess { let value = match self.endianess {
Endianess::Little => u16::from_le_bytes(source_data), Endianess::Little => LittleEndian::read_u16(self.remaining_data()),
Endianess::Big => u16::from_be_bytes(source_data) Endianess::Big => BigEndian::read_u16(self.remaining_data()),
}; };
self.position += 2; self.position += 2;
@ -55,11 +54,9 @@ impl Bufferer {
return Err(PacketUnderflow); return Err(PacketUnderflow);
} }
let source_data: [u8; 4] = (&self.data[self.position..self.position + 4]).try_into().unwrap();
let value = match self.endianess { let value = match self.endianess {
Endianess::Little => u32::from_le_bytes(source_data), Endianess::Little => LittleEndian::read_u32(self.remaining_data()),
Endianess::Big => u32::from_be_bytes(source_data) Endianess::Big => BigEndian::read_u32(self.remaining_data()),
}; };
self.position += 4; self.position += 4;
@ -71,11 +68,9 @@ impl Bufferer {
return Err(PacketUnderflow); return Err(PacketUnderflow);
} }
let source_data: [u8; 4] = (&self.data[self.position..self.position + 4]).try_into().unwrap();
let value = match self.endianess { let value = match self.endianess {
Endianess::Little => f32::from_le_bytes(source_data), Endianess::Little => LittleEndian::read_f32(self.remaining_data()),
Endianess::Big => f32::from_be_bytes(source_data) Endianess::Big => BigEndian::read_f32(self.remaining_data())
}; };
self.position += 4; self.position += 4;
@ -87,11 +82,9 @@ impl Bufferer {
return Err(PacketUnderflow); return Err(PacketUnderflow);
} }
let source_data: [u8; 8] = (&self.data[self.position..self.position + 8]).try_into().unwrap();
let value = match self.endianess { let value = match self.endianess {
Endianess::Little => u64::from_le_bytes(source_data), Endianess::Little => LittleEndian::read_u64(self.remaining_data()),
Endianess::Big => u64::from_be_bytes(source_data) Endianess::Big => BigEndian::read_u64(self.remaining_data())
}; };
self.position += 8; self.position += 8;
@ -152,10 +145,6 @@ impl Bufferer {
self.position -= by; self.position -= by;
} }
pub fn get_data_in_front_of_position(&self) -> Vec<u8> {
self.data[self.position..].to_vec()
}
pub fn data_length(&self) -> usize { pub fn data_length(&self) -> usize {
self.data.len() self.data.len()
} }
@ -164,6 +153,10 @@ impl Bufferer {
&self.data[self.position..] &self.data[self.position..]
} }
pub fn remaining_data_vec(&self) -> Vec<u8> {
self.data[self.position..].to_vec()
}
pub fn remaining_length(&self) -> usize { pub fn remaining_length(&self) -> usize {
self.data.len() - self.position self.data.len() - self.position
} }

View file

@ -21,7 +21,7 @@ impl Packet {
Ok(Self { Ok(Self {
header: buffer.get_u32()?, header: buffer.get_u32()?,
kind: buffer.get_u8()?, kind: buffer.get_u8()?,
payload: buffer.get_data_in_front_of_position() payload: buffer.remaining_data_vec()
}) })
} }
@ -110,7 +110,7 @@ impl SplitPacket {
compressed, compressed,
decompressed_size, decompressed_size,
uncompressed_crc32, uncompressed_crc32,
payload: buffer.get_data_in_front_of_position() payload: buffer.remaining_data_vec()
}) })
} }