wxtla 0.3.1

Wired eXploring Target Layer Accessor
Documentation
use crate::{ByteSource, Error, Result};

pub(crate) fn read_exact_at(source: &dyn ByteSource, offset: u64, size: usize) -> Result<Vec<u8>> {
  let mut buf = vec![0u8; size];
  source.read_exact_at(offset, &mut buf)?;
  Ok(buf)
}

pub(crate) fn read_slice(data: &[u8], offset: usize, size: usize) -> Result<&[u8]> {
  data
    .get(offset..offset + size)
    .ok_or_else(|| Error::invalid_format("xfs slice out of bounds"))
}

pub(crate) fn be_u16(data: &[u8]) -> u16 {
  u16::from_be_bytes([data[0], data[1]])
}

pub(crate) fn be_u32(data: &[u8]) -> u32 {
  u32::from_be_bytes([data[0], data[1], data[2], data[3]])
}

pub(crate) fn be_u64(data: &[u8]) -> u64 {
  u64::from_be_bytes([
    data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7],
  ])
}