mirror of
https://github.com/tribufu/rust-gamedig
synced 2026-06-01 09:42:41 +00:00
[Crate] Use Byteorder crate
This commit is contained in:
parent
e163774685
commit
9ad2f143dd
3 changed files with 17 additions and 22 deletions
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue