hexspell/
utils.rs

1use crate::errors::FileParseError;
2
3pub fn extract_u64(buffer: &[u8], offset: usize) -> Result<u64, FileParseError> {
4    buffer
5        .get(offset..offset + 8)
6        .ok_or(FileParseError::BufferOverflow)
7        .and_then(|bytes| bytes.try_into().map_err(|_| FileParseError::BufferOverflow))
8        .map(u64::from_le_bytes)
9}
10
11pub fn extract_u32(buffer: &[u8], offset: usize) -> Result<u32, FileParseError> {
12    buffer
13        .get(offset..offset + 4)
14        .ok_or(FileParseError::BufferOverflow)
15        .and_then(|bytes| {
16            bytes
17                .try_into()
18                .map_err(|_| FileParseError::BufferOverflow)
19                .map(u32::from_le_bytes)
20        })
21}
22
23pub fn extract_u16(buffer: &[u8], offset: usize) -> Result<u16, FileParseError> {
24    buffer
25        .get(offset..offset + 2)
26        .ok_or(FileParseError::BufferOverflow)
27        .and_then(|bytes| bytes.try_into().map_err(|_| FileParseError::BufferOverflow))
28        .map(u16::from_le_bytes)
29}